ฉันจะตั้งค่า Excel ให้นำเข้าคอลัมน์ทั้งหมดของไฟล์ CSV เป็นข้อความได้อย่างไร


68

แม้ว่าฉันพยายามหลีกเลี่ยงมันฉันต้องเปิดไฟล์ CSV ใน Excel เป็นครั้งคราว เมื่อฉันทำมันจะจัดรูปแบบคอลัมน์ที่มีตัวเลขซึ่งทำให้พวกเขาไร้ประโยชน์เพื่อจุดประสงค์ของฉัน เท่าที่ฉันจะบอกได้วิธีเดียวที่จะป้องกันไม่ให้สิ่งนี้เกิดขึ้นกับการนำเข้าคือการเปลี่ยนชื่อไฟล์เพื่อให้นามสกุลไม่ได้เป็น. csv และใช้ตัวช่วยสร้างการนำเข้าเพื่อระบุรูปแบบของแต่ละคอลัมน์ สำหรับไฟล์ที่มี 50-60 คอลัมน์จะไม่สามารถใช้งานได้

เนื่องจากทุกคำตอบสำหรับคำถามที่ถามบ่อยนี้บนอินเทอร์เน็ตแสดงให้เห็นวิธีการแปลงตัวเลขที่จัดรูปแบบกลับคืนเมื่อไฟล์เปิด (ซึ่งจะไม่ทำงานสำหรับฉัน - ฉันต้องการแก้ปัญหาทั่วไปไม่ใช่กรณีเฉพาะบางอย่าง) หรือเลือกประเภทรูปแบบของแต่ละคอลัมน์ (ซึ่งฉันไม่ต้องการ) ด้วยตนเองฉันกำลังมองหาวิธีการตั้งค่าหรือสไตล์ที่ต้องการทั่วโลกซึ่งคอลัมน์ทั้งหมดของไฟล์ CSV ทั้งหมดที่เปิดจะถูกจัดรูปแบบเป็นข้อความเสมอ ฉันรู้เกี่ยวกับ "การหุ้มเกราะ" ตัวเลขด้วยเครื่องหมายคำพูดเช่นกัน แต่ไฟล์ที่ฉันไม่ได้เป็นเช่นนั้นและฉันก็หวังที่จะหลีกเลี่ยงการประมวลผลไฟล์ล่วงหน้าเพื่อที่ Excel จะไม่ทำให้แย่ลง

มีวิธีการเฉพาะนี้หรือไม่: จัดรูปแบบคอลัมน์ทั้งหมดในไฟล์ CSV ที่เปิดเป็นข้อความโดยไม่ต้องเลือกแต่ละคอลัมน์ด้วยตนเองทุกครั้งในระหว่างการนำเข้า

ฉันใช้ Excel 2003 แต่ฉันจะตอบคำตอบสำหรับปี 2007 ถ้านั่นคือสิ่งที่คุณรู้


1
เฮ้ Scripting Guy ทำบทความบล็อกเกี่ยวกับการนำเข้า CSV ไปยัง Excelที่อาจมีเกร็ดเล็กเกร็ดน้อยที่เป็นประโยชน์สำหรับคุณ เล่นกับวัตถุข้อมูลภายใน PowerShell อาจช่วยให้คุณทำสิ่งที่คุณต้องการ ไม่โพสต์เป็นคำตอบเนื่องจากเป็นเพียงลิงก์ภายนอก แต่อาจมีบางสิ่งที่คุณสามารถใช้งานได้
เมทริกซ์ตุ่น

คำตอบ:


7

งานนี้:

Sub OpenCsvAsText(ByVal strFilepath As String)

    Dim intFileNo As Integer
    Dim iCol As Long
    Dim nCol As Long
    Dim strLine As String
    Dim varColumnFormat As Variant
    Dim varTemp As Variant

    '// Read first line of file to figure out how many columns there are
    intFileNo = FreeFile()
    Open strFilepath For Input As #intFileNo
    Line Input #intFileNo, strLine
    Close #intFileNo
    varTemp = Split(strLine, ",")
    nCol = UBound(varTemp) + 1

    '// Prepare description of column format
    ReDim varColumnFormat(0 To nCol - 1)
    For iCol = 1 To nCol
        varColumnFormat(iCol - 1) = Array(iCol, xlTextFormat)
        ' What's this? See VBA help for OpenText method (FieldInfo argument).
    Next iCol

    '// Open the file using the specified column formats
    Workbooks.OpenText _
            Filename:=strFilepath, _
            DataType:=xlDelimited, _
            ConsecutiveDelimiter:=False, Comma:=True, _
            FieldInfo:=varColumnFormat

End Sub

การใช้งาน:

OpenCsvAsText "C:\MyDir\MyFile.txt"

ขณะนี้ไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคเปิดเป็นแผ่นงาน Excel โดยมีคอลัมน์ทั้งหมดจัดรูปแบบเป็นข้อความ

โปรดทราบว่าโซลูชันตัวช่วยสร้างของ @ Wetmelon ใช้ได้ดี แต่ถ้าคุณเปิดไฟล์หลายไฟล์คุณอาจจะรู้สึกเหนื่อยล้าทุกครั้งเมื่อเลื่อนไปที่คอลัมน์ 60 เพื่อเปลี่ยนเป็น Shift-Click

แก้ไข @ GSerg ระบุไว้ในความคิดเห็นด้านล่างว่า "ไม่ทำงาน" และ "กินช่องว่างและเลขศูนย์นำหน้า" ฉันจะพูดถึงความคิดเห็นคำถามซึ่งเป็นคำอธิบายเพิ่มเติม:

ด้วยเหตุผลที่ไม่รู้จักแม้ว่าคุณจะระบุรูปแบบสำหรับคอลัมน์ทั้งหมดใน VBA อย่างชัดเจนก็ตาม Excel จะไม่สนใจหากส่วนขยายไฟล์เป็น CSV ทันทีที่คุณเปลี่ยนส่วนขยายรหัสเดียวกันนั้นจะให้ผลลัพธ์ที่ถูกต้อง

ดังนั้นโค้ดด้านบน "ใช้งานได้" แต่ถูกฆ่าโดยพฤติกรรม Excel ที่ไร้สาระนี้ ไม่ว่าคุณจะตัดส่วนไหนคุณจะต้องเปลี่ยนส่วนขยายเป็นอย่างอื่นนอกเหนือจาก ".csv" ขออภัย! หลังจากนั้นคุณกลับบ้านฟรี


1
ใช้งานไม่ได้ กินที่ว่างกิน zeroes ชั้นนำเป็นต้น
GSerg


1
วิธีการที่ใช้Workbooks.OpenTextมีข้อบกพร่องตามการออกแบบ (ดูคำตอบของฉันด้านล่าง) ใช้QueryTablesแทน
nixda

71

วิธีเปิด CSV ใน Excel

วิธีที่ดี

  • Excel →ข้อมูล→รับข้อมูลภายนอก→เลือกคอลัมน์ทั้งหมดด้วยShiftและเลือกข้อความ

    Upside: ปฏิบัติต่อค่าทั้งหมดอย่างถูกต้องเป็นข้อความโดยไม่มีข้อยกเว้น

    ข้อเสีย: ขั้นตอนมากกว่าการดับเบิลคลิกทั่วไป

วิธีที่ไม่ดี

  • เปิด CSV ด้วยการดับเบิลคลิกหรือเปิดด้วย Excel พร้อมกล่องโต้ตอบ

    ข้อเสีย: ตัวจัดการ CSV ภายในของ Excel ตีความค่าที่มีการนำหน้า-หรือ=เซ็นชื่อเป็นสูตรแทนที่จะเป็นข้อความ

    ข้อเสีย: คุณจะสูญเสียศูนย์นำหน้าจากค่าไบนารีเช่น0001เนื่องจากรูปแบบคอลัมน์ที่ตรวจพบโดยอัตโนมัติของ Excel

วิธีที่ดี (สำหรับ VBA)

  • ใช้ QueryTables (คู่ VBA ถึงGet external data) → โค้ดตัวอย่าง

    Upside: ปฏิบัติต่อค่าทั้งหมดอย่างถูกต้องเป็นข้อความโดยไม่มีข้อยกเว้น

    ข้อเสีย: โค้ดมากกว่าOpenTextวิธีเล็กน้อย

วิธีที่ไม่ดี (สำหรับ VBA)

  • ใช้Workbooks.OpenTextวิธีการ→ รหัสตัวอย่าง

    ข้อเสีย: วิธีนี้ยังคงใช้ตัวจัดการการนำเข้า CSV ภายในของ Excel กับข้อบกพร่องทั้งหมด

    ข้อเสีย: นอกจากนี้fieldinfoพารามิเตอร์ของOpenTextจะถูกละเว้นหากส่วนขยายเป็น CSV โดยปกติพารามิเตอร์นี้จะให้คุณเลือกทุกรูปแบบคอลัมน์ แต่ไม่ใช่ว่าส่วนขยายคือ CSV คุณสามารถอ่านเพิ่มเติมเกี่ยวกับพฤติกรรมนี้ในStack Overflow

    การเปลี่ยนชื่อส่วนขยายแหล่งที่มาชั่วคราวจาก CSV เป็น TXT แล้วกลับไปที่ CSV เป็นวิธีแก้ไขปัญหาที่ถูกต้องหากคุณมีการควบคุมเต็มรูปแบบของไฟล์ต้นฉบับ

วิธีการเพิ่มเติม

  • หากคุณมีสิทธิ์เข้าถึงแหล่งที่สร้าง CSV ของคุณคุณสามารถแก้ไขไวยากรณ์ CSV
    ล้อมรอบทุกค่าด้วยเครื่องหมายอัญประกาศคู่และนำหน้าเครื่องหมายเท่ากับที่เหมือนกัน="00001"หรือเติมแท็บล่วงหน้าให้กับทุกค่า ทั้งสองวิธีจะบังคับให้ Excel รักษาค่าเป็นข้อความ

    เนื้อหา CSV ดั้งเดิม
    ป้อนคำอธิบายรูปภาพที่นี่

    CSV ใน Excel เมื่อเปิดด้วยการดับเบิลคลิก
    ป้อนคำอธิบายรูปภาพที่นี่

    หมายเหตุวิธีที่บรรทัด 2 (วิธีอัญประกาศคู่) และบรรทัด 3 (วิธีแท็บ) จะไม่เปลี่ยนแปลงโดย Excel

  • เปิด CSV ในNotepadและคัดลอกและวางค่าทั้งหมดไปยัง Excel จากนั้นใช้ข้อมูล - ข้อความเป็นคอลัมน์
    ข้อเสีย: ข้อความในคอลัมน์สำหรับการเปลี่ยนรูปแบบคอลัมน์จากทั่วไปกลับเป็นข้อความสร้างผลลัพธ์ที่ไม่สอดคล้องกัน หากค่ามี-อักขระที่ล้อมรอบ (เช่น "= E1-S1") Excel จะพยายามแบ่งค่านั้นเป็นคอลัมน์มากกว่าหนึ่งคอลัมน์ ค่าที่อยู่ทางขวามือของเซลล์นั้นอาจถูกเขียนทับ

    (พฤติกรรมของคอลัมน์เป็นข้อความถูกเปลี่ยนบางแห่งระหว่าง Excel 2007 และ 2013 ดังนั้นจึงไม่ทำงานอีกต่อไป)


Excel Add-In เพื่อเปิด CSV และนำเข้าค่าทั้งหมดเป็นข้อความ

นี่เป็นปลั๊กอินของ Excel เพื่อลดความยุ่งยากในการนำเข้า CSV
ข้อได้เปรียบหลัก: เป็นโซลูชันและการใช้งานQueryTablesด้วยคลิกเดียววิธีกันกระสุนเดียวกันด้านหลังรับข้อมูลภายนอก

  • มันเพิ่มคำสั่งเมนูใหม่ไปยัง Excel ซึ่งช่วยให้คุณสามารถนำเข้าไฟล์ CSV และ TXT ค่าทั้งหมดจะถูกนำเข้าไปยังแผ่นงานที่ใช้งานอยู่เริ่มต้นที่เซลล์ที่เลือกในปัจจุบัน
  • Excel Add-in พร้อมใช้งานสำหรับ Office ทุกรุ่นใน Windows และ Mac
  • Add-In ทั้งหมดมีโค้ดเพียง 35 บรรทัด ตรวจสอบซอร์สโค้ดที่คอมเม้นต์หากคุณสงสัย
  • ตัวคั่นรายการ CSV ที่ใช้ (เครื่องหมายจุลภาคหรืออัฒภาค) มาจากการตั้งค่า Excel ในเครื่องของคุณ
  • การเข้ารหัสถูกตั้งค่าเป็น UTF-8

การติดตั้ง

  1. ดาวน์โหลดAdd-Inและบันทึกลงในโฟลเดอร์ Add-In ของคุณ:%appdata%\Microsoft\AddIns
  2. เปิด Excel และเปิดใช้งาน Add-In: File tab → Options → Add-Ins → Go ToและเลือกImportCSV.xla
  3. เปิดใช้งานแมโคร VBA: File tab → Options → Trust Center → Trust Center Settings → Macro Settings → Enable all macros
  4. รีสตาร์ท Excel

คุณจะสังเกตเห็นรายการแถบเมนูใหม่ที่เรียกว่า Add-In และคุณใช้ปุ่มนี้เพื่อเปิดไฟล์ CSV ของคุณอย่างรวดเร็วโดยไม่ต้องผ่านกล่องโต้ตอบการนำเข้า

ป้อนคำอธิบายรูปภาพที่นี่


สคริปต์ PowerShell เพื่อเปิด CSV โดยตรงจาก Windows Explorer

คุณสามารถใช้สคริปต์ PowerShell เพื่อเปิดไฟล์ CSV และส่งต่อไปยัง Excel โดยอัตโนมัติ สคริปต์ใช้วิธีการนำเข้าข้อความของ Excel ในแบบไม่โต้ตอบซึ่งถือว่าค่าเป็นข้อความเสมอและเป็นโบนัสจัดการการเข้ารหัส UTF-8

  1. สร้างไฟล์ข้อความใหม่และวางสคริปต์ด้านล่าง รุ่นความคิดเห็นสามารถพบได้ที่นี่
$CSVs = @()
$args.ForEach({
    If ((Test-Path $_) -and ($_ -Match "\.csv$|\.txt$")) {
        $CSVs += ,$_
    } 
})

if (-Not $null -eq $CSVs) {

    $excel = New-Object -ComObject excel.application 
    $excel.visible = $true
    $excel.SheetsInNewWorkbook = $CSVs.Count    
    $workbook = $excel.Workbooks.Add()

    for ($i=0; $i -lt $CSVs.Count; $i++){

        $csv = Get-Item $CSVs[$i]
        $worksheet = $workbook.worksheets.Item($i + 1)
        $worksheet.Name = $csv.basename

        $TxtConnector = ("TEXT;" + $csv.fullname)
        $Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
        $query = $worksheet.QueryTables.item($Connector.name)
        $query.TextFilePlatform = 65001
        $query.TextFileTextQualifier = 1
        $query.TextFileOtherDelimiter = $Excel.Application.International(5) 
        $query.TextFileParseType  = 1
        $arrFormats = ,2 * $worksheet.Cells.Columns.Count
        $query.TextFileColumnDataTypes = $arrFormats
        $query.AdjustColumnWidth = 1
        $query.Refresh()
        $query.Delete()
    }
}
  1. C:\my\folder\myScript.ps1บันทึกไว้ที่อื่นเช่น (หมายเหตุส่วนขยาย.ps1)
    • เปิดโฟลเดอร์ sendto ของคุณผ่านWinR» shell:sendto» Enter
  2. สร้างทางลัดใหม่ผ่านคลิกขวา»ใหม่»ทางลัดและวางบรรทัดนี้ อย่าลืมเปลี่ยนเส้นทางไปยังเส้นทางของคุณเองที่คุณใส่สคริปต์ของคุณ ตั้งชื่อทางลัดตัวอย่างเช่นExcel

"% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe" -NoProfile - ไม่โต้ตอบ - หน้าต่างซ่อนสไตล์ - ไฟล์"C: \ my \ folder \ myScript.ps1"

ตอนนี้คุณสามารถเลือก (หลาย) CSVs และเปิดใน Excel ผ่าน Right-click » SendTo » Excel


1
Add-In ได้รับการทดสอบกับ Office 2003 และ 2013
nixda

"วิธีที่ดีที่สุด" ด้านบนคือสิ่งที่ฉันต้องการสำหรับการนำเข้าครั้งเดียว ไม่จำเป็นต้องยุ่งกับ VBA และสามารถควบคุมได้ว่าคอลัมน์ใดที่จะถูกนำมาเป็นวันที่ / หมายเลข (ส่วนที่เหลือจะเป็นข้อความ) ฉันหวังว่า Excel จะเสนอให้เปิดตัวช่วยสร้างการนำเข้านี้เมื่อดับเบิลคลิกที่ CSV
ADTC

@Vadzim สวัสดีฉันขอขอบคุณคุณพยายามแก้ไขลิงก์ที่ตายแล้ว ge.tt แน่นอนทำให้ปัญหาบางอย่างในเดือนที่ผ่านมา แต่ฉันคิดว่าฉันแก้ไขปัญหาทั้งหมดแล้วและลิงก์เดิมดั้งเดิมควรใช้งานได้อีกครั้ง ฉันไม่รู้ว่าทำไม Google Chrome จึงเตือนก่อนดาวน์โหลดทุกอย่างจาก ge.tt แต่เบราว์เซอร์อื่น ๆ ทั้งหมดทำงานได้ตามปกติและฉันสามารถรับรองได้ว่าพวกเขาจะไม่มีมัลแวร์
nixda

@nixda ขอขอบคุณสำหรับการฟื้นฟูการเชื่อมโยงและคำตอบที่ดี
Vadzim

@nixda ลิงก์ไปยัง ge.tt เสียอีกครั้ง ส่วนใหญ่บอกว่าพวกเขาไม่สามารถใช้งานได้เพราะเจ้าของละเมิด TOS อย่างไรก็ตามไฟล์สำหรับOpenCSV.exeระบุว่า " ไฟล์เหล่านี้ไม่สามารถใช้งานได้อีกต่อไปเนื่องจากละเมิดข้อกำหนดในการให้บริการ" ข้อใดทำให้ฉันถามคุณเป็นผู้แต่งฟังก์ชั่น ImportMyCSV Excel หรือไม่ (sourcecode ยังคงมีอยู่ใน pastebin) นี่เป็นเครื่องมือที่ยอดเยี่ยม - ฉันใช้ที่ทำงานและแนะนำให้คนอื่น แต่ฉันสนใจที่มาของรหัสหากไม่มีสิ่งใดที่จะให้เครดิตผู้เขียนได้อย่างถูกต้อง
GlennFromIowa

5

คุณสามารถลองโดยเปิด. xlsx ก่อนจากนั้นสร้างการเชื่อมต่อข้อมูลและนำเข้า. csv เลือกตัวคั่น "จุลภาค" จากนั้นเลือกตัวเลือกเพื่อถือว่าคอลัมน์ทั้งหมดเป็นข้อความแทนที่จะเป็น "ทั่วไป"

แก้ไข: โอ้ฉันไม่ได้อ่านคำถามทั้งหมด ในตัวช่วยสร้างการนำเข้าให้เลือกส่วนหัวคอลัมน์แรกที่คุณต้องการนำเข้าเป็นข้อความเลื่อนไปที่ส่วนหัวคอลัมน์สุดท้ายแล้วกด Shift + คลิกที่ส่วนหัว จากนั้นเลือกตัวเลือกรัศมี "ข้อความ"


2
ใช่มันใช้งานได้ดี - ตราบใดที่นามสกุลของไฟล์ไม่ใช่ ".csv" +1
Jean-François Corbett

4

ข้อเสนอแนะของ Wetmelon ใช้งานได้ (แม้จะมี. CSV) หากคุณทำสิ่งต่อไปนี้:

  1. เปิด Excel ไปยังสมุดงานหรือแผ่นงานเปล่า
  2. คลิกที่ข้อมูล> [รับข้อมูลภายนอก] จากข้อความ
  3. ใช้ "Text Import Wizard" ตามที่ Wetmelon อธิบาย (คั่นด้วยจุลภาคเลือกคอลัมน์แรก SHIFT + คลิกคอลัมน์สุดท้ายตั้งค่าทุกอย่างเป็น Text)

ฉันรู้ว่ามันเป็นขั้นตอนเพิ่มเติม แต่อย่างน้อยก็ช่วยให้ฉันเปิด CSV ด้วยวิธีนี้โดยไม่ต้องเปลี่ยนนามสกุล


2

ระวัง!

เมื่อใช้วิธีการด้วยตนเอง "Excel → Data →รับข้อมูลภายนอก→เลือกคอลัมน์ทั้งหมดแล้วเลือกข้อความ" ......

สิ่งนี้จะตั้งค่าคอลัมน์เป็นข้อความ "ที่มีข้อมูลในแถวแรก" (โดยทั่วไปคือแถวส่วนหัว) ตัวช่วยสร้างนี้จะไม่แสดงคอลัมน์ที่อยู่ด้านขวาที่อาจมีข้อมูลเพิ่มเติมด้านล่าง แต่จะไม่แสดงในแถวแรก ตัวอย่างเช่น:

Row1Col1, Row1Col2, Row1Col3

Row2Col1, Row2Col2, Row2Col3, Row2Col4

คุณจะไม่เห็น Col 4 ในตัวช่วยสร้างการนำเข้าดังนั้นคุณจะไม่ได้รับตัวเลือกให้เปลี่ยนจากทั่วไปเป็นรูปแบบข้อความก่อนนำเข้า !!!!


1
คำเตือนที่ดีตั้งแต่ 99.9999% ของเวลาผู้คนไม่เลื่อนลงมาในตัวช่วยสร้างการนำเข้าและถึงแม้จะเป็นเรื่องยากที่จะรับคอลัมน์ทั้งหมด อย่างไรก็ตามในทางเทคนิคคุณสามารถเลื่อนลงมาในขณะที่คุณอยู่ในตัวช่วยสร้างการนำเข้าและจับคอลัมน์เพิ่มเติมที่ไม่มีข้อมูลในแถวแรก
GlennFromIowa

1

นี่คือขั้นตอนทางเลือกในการเขียนโค้ดข้างต้นโดย Jean-François Corbett

ขั้นตอนนี้จะนำเข้าไฟล์ csv ไปยัง Excel ด้วยคอลัมน์ทั้งหมดที่จัดรูปแบบเป็นข้อความ

Public Sub ImportCSVAsText()
    Dim TempWorkbook As Workbook
    Dim TempWorksheet As Worksheet
    Dim ColumnCount As Integer
    Dim FileName As Variant
    Dim ColumnArray() As Integer

    'Get the file name
    FileName = Application.GetOpenFilename(FileFilter:="All Files (*.*),*.*", FilterIndex:=1, Title:="Select the CSV file", MultiSelect:=False)

    If FileName = False Then Exit Sub

    Application.ScreenUpdating = False

    'Open the file temporarily to get the count of columns
    Set TempWorkbook = Workbooks.Open(FileName)
    ColumnCount = TempWorkbook.Sheets(1).Range("A1").SpecialCells(xlCellTypeLastCell).Column
    TempWorkbook.Close SaveChanges:=False

    'Resize the array to number of columns
    ReDim ColumnArray(1 To ColumnCount)

    For i = 1 To ColumnCount
        ColumnArray(i) = xlTextFormat
    Next i

    Set TempWorkbook = Workbooks.Add
    Set TempWorksheet = TempWorkbook.Sheets(1)

    Application.DisplayAlerts = False
    TempWorkbook.Sheets(2).Delete
    TempWorkbook.Sheets(2).Delete
    Application.DisplayAlerts = True

    With TempWorksheet.QueryTables.Add("TEXT;" & FileName, TempWorksheet.Cells(1, 1))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1251
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = ColumnArray
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

End Sub

ยินดีต้อนรับสู่ SuperUser แทนที่จะเพิ่มคำตอบใหม่คุณควรแก้ไขคำตอบของ Corbett และปรับปรุงให้ดีขึ้น ฉันรู้ว่าคุณยังไม่มีชื่อเสียงเพียงพอที่จะทำเช่นนั้น แต่คุณสามารถเชื่อมโยงการเปลี่ยนแปลงของคุณในความคิดเห็นที่คุณขอให้เขาอ่าน
Vlastimil Ovčáčík

0

หากคุณนำเข้าข้อมูลเดียวกันเสมอ (รูปแบบบันทึกคงที่โครงร่าง ฯลฯ ... ) คุณสามารถเขียนแมโคร Access ได้โดยใช้ข้อมูลจำเพาะการนำเข้าแล้วถ่ายโอนข้อมูลกลับไปยัง Excel ทำสิ่งนี้อาจครั้ง วิธีอื่นที่ฉันได้ทำคือใช้ VBA และอ่านข้อมูลลงในแผ่นงานทีละระเบียนแล้วแยกวิเคราะห์เมื่ออ่าน เท่าที่ฉันรู้ว่าไม่มีวิธีการตั้งค่ารูปแบบเริ่มต้นในระหว่างการนำเข้าใน Excel และแม้ว่าคุณจะสามารถทำให้เกิดปัญหากับประเภทไฟล์ถัดไปที่คุณพยายามแยกวิเคราะห์


1
นี่คือสิ่ง - ฉันไม่ได้พยายามทำการแยกวิเคราะห์ใด ๆ ยกเว้นการใส่สตริงข้อความที่อยู่ระหว่างเครื่องหมายจุลภาคในคอลัมน์เมื่อฉันนำเข้า หากฉันต้องการให้ฟอร์แมตด้วยวิธีใดวิธีหนึ่งฉันสามารถทำเช่นนั้นได้ (เช่นทำวันที่ของสตริงวันที่เป็นต้น) แต่ฉันต้องการข้อมูลที่เหลือเพียงอย่างเดียวในตอนแรก ทำไมมันจึงยากเหลือเกิน
วิลเลียมกันน์

0

ตามคำขอส่งความคิดเห็นของฉันเป็นคำตอบ (เพิ่มข้อมูลอีกเล็กน้อย):

เฮ้ Scripting Guy ทำบทความบล็อกเกี่ยวกับการนำเข้า CSV ไปยัง Excelที่อาจมีเกร็ดเล็กเกร็ดน้อยที่เป็นประโยชน์สำหรับคุณ เล่นกับวัตถุข้อมูลภายใน PowerShell อาจช่วยให้คุณทำสิ่งที่คุณต้องการ

แม้ว่าบทความจะกล่าวถึงการนำเข้าข้อมูลไปยังเซลล์ซึ่งอาจปล่อยให้อยู่ในรูปแบบตัวเลขโดยเฉพาะ แต่ก็อาจเป็นไปได้ที่จะเล่นกับคุณสมบัติของ Excel ComObject และวิธีการบังคับให้ข้อมูลเข้าสู่เซลล์เป็นข้อความดิบแทน (หรือบังคับ การจัดรูปแบบของเซลล์เป็นข้อความก่อนหรือหลังการนำเข้า)


0

ด้วยเหตุผลที่ไม่รู้จักแม้ว่าคุณจะระบุรูปแบบสำหรับคอลัมน์ทั้งหมดอย่างชัดเจนก็ตาม Excel จะไม่สนใจหากส่วนขยายไฟล์เป็น CSV

ตัวเลือกบางอย่าง:

  • สร้างแบบสอบถามเพื่อนำเข้าข้อมูลที่เป็น Wetmelon แสดงให้เห็น
    ข้อเสีย: คุณอาจพลาดไดรเวอร์ฐานข้อมูล CSV ในเครื่อง 64 บิต

  • ใช้รหัสของ Jeanแต่รวมการคัดลอกไฟล์ไปยังโฟลเดอร์ชั่วคราวและเปลี่ยนนามสกุลของสำเนา
    ข้อเสีย: ไม่มีลิงก์ไปยังไฟล์ต้นฉบับ (การบันทึกจะเขียนทับสำเนา); คุณจะต้องลบสำเนาด้วยตนเองหลังจากนั้น แต่ถึงกระนั้นคุณยังสามารถบันทึกเป็น CSV ดั้งเดิมได้ด้วยตนเอง

  • เปิด CSV ใน Notepad Ctrl+A, Ctrl+Cวางไปยัง Excel แล้วข้อมูล - ข้อความเป็นคอลัมน์แล้วมันเป็นตัวช่วยสร้างปกติที่คุณสามารถตั้งคอลัมน์ทั้งหมดเป็นข้อความในหนึ่งไป มันเป็นรสชาติที่แตกต่างจากตัวเลือกก่อนหน้านี้เพราะมันยังซ่อนส่วนขยายที่มีค่าจาก Excel
    ข้อเสีย: คู่มือ

  • มี VBA ลูปที่ง่ายมากที่อ่านไฟล์ทั้งหมดลงในหน่วยความจำและวางลงบนชีตแต่ละเซลล์
    ข้อเสีย: ช้าลงน่าเกลียด


ไม่ใช่ "ลิงก์ไปยังไฟล์ [CSV] ดั้งเดิม" ไม่ใช่ข้อเสียของวิธีการเหล่านี้ทั้งหมดหรือไม่ ฉันชอบความคิดในการคัดลอกไปยังโฟลเดอร์ temp และเปลี่ยนนามสกุลที่นั่น ... สามารถเขียนทับต้นฉบับ (เป็น CSV) ทันทีที่เปิดสำเนา
Jean-François Corbett

@ Jean-FrançoisCorbettฉันใช้ตัวช่วยสร้างการนำเข้าตลอดเวลาเพื่อนำเข้าไฟล์. csv ที่มีนามสกุลของ csvใน Excel 2010 ฉันระบุรูปแบบคอลัมน์เป็นข้อความอย่างชัดเจนและยังคงรูปแบบเซลล์เป็นข้อความ นี่อาจเป็นปัญหากับ Excel รุ่นเก่าใช่ไหม
GlennFromIowa

-2

ถ้าผมเข้าใจคำถามถูกต้องนี้จะแก้ไขได้อย่างง่ายดายโดยใช้ตัวเลือกไขว้ในวางพิเศษตามที่อธิบายไว้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.