เป็นไปได้หรือไม่ที่จะบังคับให้ Excel รับรู้ไฟล์ UTF-8 CSV โดยอัตโนมัติ


455

ฉันกำลังพัฒนาส่วนหนึ่งของแอปพลิเคชันที่รับผิดชอบในการส่งออกข้อมูลบางส่วนไปเป็นไฟล์ CSV แอปพลิเคชันใช้ UTF-8 เสมอเนื่องจากมีหลายภาษาในทุกระดับ แต่การเปิดไฟล์ CSV ดังกล่าว (ที่มีเครื่องหมายการออกเสียงเช่นตัวอักษรซีริลลิ, ตัวอักษรกรีก) ใน Excel Г„/Г¤, Г–/Г¶ไม่บรรลุผลที่คาดว่าจะแสดงสิ่งที่ต้องการ และฉันไม่รู้วิธีบังคับให้ Excel เข้าใจว่าไฟล์ CSV แบบเปิดถูกเข้ารหัสใน UTF-8 ฉันยังพยายามระบุ UTF-8 BOM EF BB BFแต่ Excel ไม่สนใจสิ่งนั้น

มีวิธีแก้ปัญหาหรือไม่?

PS เครื่องมือใดที่อาจมีพฤติกรรมเช่นเดียวกับ Excel


UPDATE

ฉันต้องบอกว่าฉันสับสนกับการตั้งคำถามของชุมชน เมื่อฉันถามคำถามนี้ฉันขอวิธีเปิดไฟล์ UTF-8 CSV ใน Excel โดยไม่มีปัญหาใด ๆ สำหรับผู้ใช้อย่างคล่องแคล่วและโปร่งใส แต่ผมใช้สูตรที่ไม่ถูกต้องขอให้ทำมันโดยอัตโนมัติ มันสับสนมากและขัดแย้งกับ VBA แมโครอัตโนมัติ มีสองคำตอบสำหรับคำถามนี้ที่ฉันขอขอบคุณมากที่สุด: คำตอบแรกโดย Alex https://stackoverflow.com/a/6002338/166589และฉันยอมรับคำตอบนี้แล้ว และรายการที่สองโดยทำเครื่องหมายhttps://stackoverflow.com/a/6488070/166589ที่ปรากฏขึ้นเล็กน้อยในภายหลัง จากมุมมองการใช้งาน Excel ดูเหมือนจะขาดการสนับสนุน CSV ที่ใช้งานง่าย UTF-8 ที่ดีดังนั้นฉันคิดว่าคำตอบทั้งคู่นั้นถูกต้องและฉันยอมรับคำตอบของ Alex ก่อนเพราะจริง ๆ แล้วระบุว่า Excel ไม่สามารถทำได้ ที่โปร่งใส นั่นคือสิ่งที่ฉันสับสนโดยอัตโนมัติที่นี่ คำตอบของ Mark ส่งเสริมวิธีการที่ซับซ้อนมากขึ้นสำหรับผู้ใช้ขั้นสูงมากขึ้นเพื่อให้ได้ผลลัพธ์ที่คาดหวัง คำตอบทั้งสองนั้นยอดเยี่ยม แต่คำตอบของอเล็กซ์เหมาะกับคำถามที่ฉันไม่ได้ระบุชัดเจนดีกว่าเล็กน้อย


อัพเดท 2

ห้าเดือนต่อมาหลังจากการแก้ไขครั้งล่าสุดฉันสังเกตเห็นว่าคำตอบของอเล็กซ์หายไปด้วยเหตุผลบางประการ ฉันหวังว่ามันจะไม่ใช่ปัญหาทางเทคนิคและฉันหวังว่าจะไม่มีการสนทนาเพิ่มเติมเกี่ยวกับคำตอบที่ดีกว่าในตอนนี้ ดังนั้นฉันจึงยอมรับคำตอบของมาร์คว่าดีที่สุด


1
คุณสามารถใช้ไฟล์ที่คั่นด้วยแท็บได้หรือไม่? ถ้าเป็นเช่นนั้นคุณอาจมีโชคมากขึ้น
Tim Perry

8
Office 2010+: ทำงานได้ดีที่สุด: UTF-16LE พร้อม BOM และ\tตัวคั่น จะทำงานในการตั้งค่าภาษาอังกฤษและไม่ใช่ภาษาอังกฤษของ Excel สามารถกดได้Ctrl-Sโดยไม่ต้องเลือกรูปแบบไฟล์ ฯลฯ จะเก็บอักขระ Unicode ไว้
เซบาสเตียน

@ ดันแคนพูดตรงๆฉันสับสนและมันยากที่จะ "ตัดสิน" ฉันยอมรับคำตอบของ alex มานานกว่า 2 ปีแล้ว (Q และ A ในวันที่ 14 พฤษภาคม) จากนั้น Mark ตอบว่าแนะนำวิธีแก้ปัญหาที่ยุ่งยาก (จริง ๆ แล้วฉันไม่ได้ตรวจสอบ) ที่ทำคะแนนได้อย่างแปลกใจ ยอดนิยมเช่นกัน เราปฏิเสธการสนับสนุนของ Excel ในโครงการของฉันมานานแล้วและฉันไม่ต้องการที่จะลบคะแนนชื่อเสียงของ alex เนื่องจาก Excel ดูเหมือนและอาจยังดูเหมือนว่า (โปรดแก้ไขฉันหากฉันผิด) เพื่อทำหน้าที่ CSV มันยากที่จะพูดขอโทษ
Lyubomyr Shaydariv

2
คำตอบของ Alex ถูกลบโดยผู้ดำเนินรายการ ไม่ได้รับคำอธิบาย แต่ถ้าคุณมีชื่อเสียงมากพอคุณยังสามารถเห็นได้
Mark Ransom

1
เนื่องจากเวลาที่เครื่องยังไม่มีอยู่ก็แค่ต้องไม่เห็นด้วย
osexpert

คำตอบ:


398

Alex ถูกต้อง แต่เมื่อคุณต้องส่งออกไปยัง csv คุณสามารถให้คำแนะนำแก่ผู้ใช้เมื่อเปิดไฟล์ csv:

  1. บันทึกไฟล์ที่ส่งออกเป็น csv
  2. เปิด Excel
  3. นำเข้าข้อมูลโดยใช้ข้อมูล -> นำเข้าข้อมูลภายนอก -> นำเข้าข้อมูล
  4. เลือกประเภทไฟล์ของ "csv" และเรียกดูไฟล์ของคุณ
  5. ในตัวช่วยสร้างการนำเข้าเปลี่ยน File_Origin เป็น "65001 UTF" (หรือเลือกตัวระบุภาษาที่ถูกต้อง)
  6. เปลี่ยน Delimiter เป็นจุลภาค
  7. เลือกตำแหน่งที่จะนำเข้าและสิ้นสุด

วิธีนี้อักขระพิเศษควรแสดงอย่างถูกต้อง


163

ตัวทำเครื่องหมายคำสั่งแบบ UTF-8 Byte-order จะบอกให้รู้ว่าคุณกำลังใช้ UTF-8 (ดูโพสต์ SO นี้ )

ในกรณีที่ใครก็ตามมีปัญหาเดียวกันกับฉันคลาสการเข้ารหัส UTF8 ของ. NET จะไม่แสดงตัวทำเครื่องหมายคำสั่งไบต์ในการGetBytes()โทร คุณจำเป็นต้องใช้สตรีม (หรือใช้วิธีแก้ปัญหา ) เพื่อรับ BOM เพื่อส่งออก


18
การแทรก UTF-8 BOM น่าจะเป็นหนทางที่จะไป หลังจากนั้นก็โปร่งใส
vy32

12
ฉันใช้ Notepad ++ เพื่อแปลง. csv จากUTF-8เป็นUTF-8 with BOM
Sébastien

3
ใช่ - ทางออกที่ดีที่สุด โพสต์ที่สับสนรอบ ๆ การตั้งค่าส่วนหัวในการตอบกลับ http วิธีนี้จะช่วยแก้ปัญหา สามารถเห็นได้เหมือนกันเมื่อเปิดไฟล์ในแผ่นจดบันทึกและบันทึกกลับลงมาโดยใช้ตัวเลือก UTF-8 เพิ่มเครื่องหมายคำสั่งย่อยด้วย
user369142

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

1
Excel เวอร์ชัน Mac ดูเหมือนจะยังคงเพิกเฉยต่อ BOM (Excel สำหรับ Mac 2011. )
Thomas Andrews

74

ข้อผิดพลาดที่มี BOM ที่ถูกละเว้นดูเหมือนว่าจะได้รับการแก้ไขสำหรับ Excel 2013 ฉันมีปัญหาแบบเดียวกันกับตัวอักษร Cyrillic แต่การเพิ่มอักขระ BOM \uFEFFก็ช่วยได้


8
เนื่องจากฉันเพิ่ม \ uFEFF ที่จุดเริ่มต้นของไฟล์ CSV ของฉัน (สร้างขึ้นใน Java) Excel จึงสามารถเปิดได้อย่างถูกต้อง! ขอบคุณ
Galdo

16
ที่แก้ไขปัญหาของฉันด้วยใน php ดูเหมือนว่านี้: $utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText;
อับดุลลาห์

@updola ขอบคุณมากสำหรับความคิดเห็นนี้ช่วยฉันชั่วโมง
ธานเฮย์ฟิลด์

UTF-8 ไม่ได้ใช้และไม่ควรใช้อักขระ BOM วิธีที่ Excel อ่าน BOM สกรูประโยชน์ของ UTF-8 มากกว่า Unicode ซึ่งเป็นความเข้ากันได้ย้อนหลังกับ ASCII การเพิ่ม BOM จะทำให้ Excel ทำงานได้ แต่จะอ่านไฟล์ UTF-8 / ASCII ที่เหมาะสมอื่น ๆ
เนลสัน

1
\ FE \ FF ทำให้ Mac OS Excel 2016 เป็นไฟล์ทั้งหมดเป็นอักษรอียิปต์โบราณ
Nakilon

56

เป็นเรื่องเหลือเชื่อที่มีคำตอบมากมาย แต่ไม่มีใครตอบคำถาม:

"เมื่อฉันถามคำถามนี้ฉันขอวิธีเปิดไฟล์ UTF-8 CSV ใน Excel โดยไม่มีปัญหาสำหรับผู้ใช้ ... "

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

ดังนั้นคำถามคือทำอย่างไรให้ Excel แสดงข้อมูล UTF8 ด้วยการดับเบิลคลิกง่ายๆ

อย่างน้อยใน Excel 2007 สิ่งนี้เป็นไปไม่ได้ถ้าคุณใช้ไฟล์ CSV เพราะ UTF8 BOM ถูกละเว้นและคุณจะเห็นเฉพาะขยะ นี่เป็นส่วนหนึ่งของคำถามของ Lyubomyr Shaydariv แล้ว:

"ฉันยังพยายามระบุ UTF-8 BOM EF BB BF แต่ Excel ไม่สนใจสิ่งนั้น"

ฉันใช้ประสบการณ์เดียวกัน: การเขียนข้อมูลภาษารัสเซียหรือกรีกลงในไฟล์ UTF8 CSV ที่มีผลลัพธ์ BOM ในถังขยะใน Excel:

เนื้อหาของไฟล์ UTF8 CSV:

Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ

ผลลัพธ์ใน Excel 2007:

CSV UTF8 Excel

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

Excel มีมานานหลายทศวรรษ เป็นที่น่าเสียดายที่ Microsoft ไม่สามารถนำสิ่งพื้นฐานเช่นการนำเข้า CSV มาใช้ในทุกปี


อย่างไรก็ตามหากคุณใส่ค่าเดียวกันลงในไฟล์ HTML และบันทึกไฟล์นั้นเป็นไฟล์ UTF8 ที่มี BOM ด้วยไฟล์นามสกุลXLSคุณจะได้รับผลลัพธ์ที่ถูกต้อง

เนื้อหาของไฟล์ UTF8 XLS:

<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>

ผลลัพธ์ใน Excel 2007:

UTF8 HTML Excel

คุณสามารถใช้สีใน HTML ซึ่ง Excel จะแสดงอย่างถูกต้อง

<style>
.Head { background-color:gray; color:white; }
.Red  { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>

ผลลัพธ์ใน Excel 2007:

UTF8 HTML Excel

ในกรณีนี้เฉพาะตารางเท่านั้นที่มีเส้นขอบสีดำและเส้น หากคุณต้องการให้เซลล์ทั้งหมดแสดงเส้นตารางนี้เป็นไปได้ใน HTML:

<html xmlns:x="urn:schemas-microsoft-com:office:excel">
    <head>
        <meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
        <xml>
            <x:ExcelWorkbook>
                <x:ExcelWorksheets>
                    <x:ExcelWorksheet>
                        <x:Name>MySuperSheet</x:Name>
                        <x:WorksheetOptions>
                            <x:DisplayGridlines/>
                        </x:WorksheetOptions>
                    </x:ExcelWorksheet>
                </x:ExcelWorksheets>
            </x:ExcelWorkbook>
        </xml>
    </head>
    <body>
        <table>
            <tr><td>Colum1</td><td>Column2</td></tr>
            <tr><td>Val1</td><td>Val2</td></tr>
            <tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
        </table>
    </body>
</html>

รหัสนี้อนุญาตให้ระบุชื่อของแผ่นงาน (ที่นี่ "MySuperSheet")

ผลลัพธ์ใน Excel 2007:

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


1
และก็เหลือเชื่อที่ผู้คนยังคงตอบมัน :) อย่างไรก็ตามฉันจะเถียงว่า CSV นั้นตายแล้ว: CSV เป็นรูปแบบการสตรีมแบบธรรมดาที่ร้ายแรงและเมื่อฉันอยู่ในโครงการนั้นเราก็ใช้มันเป็นอย่างมากสำหรับการโต้ตอบกับองค์ประกอบ ฉันจะไม่ใช้รูปแบบ HTML เนื่องจากมีลักษณะเป็นตัวแทนมากเกินไปและฉันไม่สามารถทำให้ผู้ใช้ของข้อมูลที่ส่งออกโครงการเป็น HTML เพียงเพื่อทำให้เป็นมิตรกับ Excel Excel ดูดที่ UTF-8 CSV และฉันไม่มีเงื่อนงำสิ่งที่เปลี่ยนไป 5 ปีตั้งแต่นั้นมา แต่ไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคเซมิโคลอนและแท็บเป็นความบ้าคลั่งอย่างแท้จริงฉันเดา
Lyubomyr Shaydariv

5
ไม่น่าแปลกใจที่ผู้คนยังคงตอบคำถามของคุณเพราะ Google นำมาที่นี่: ทั้งหมดมีคำถามเดียวกัน: ฉันจะทำให้ Excel โง่ทำสิ่งที่ฉันต้องการได้อย่างไร ป้อน 3 คำลงใน Google: "excel csv utf8" และคำถามของคุณคือผลลัพธ์แรกของโลก คุณเขียนหนังสือขายดี!
Elmue

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

3
@Warrior: ".. แต่ไม่มีคำตอบใด ๆ ที่ตอบคำถามแล้ว" สิ่งนี้ไม่ถูกต้อง ฉันได้ตอบคำถามนั้น: อย่างน้อยใน Excel 2007 มันเป็นไปไม่ได้ นี่คือคำตอบที่แน่นอน หาก Excel เพิกเฉย UTF8 BOM และตีความข้อมูลเป็น ANSI จะไม่มีวิธีนำเข้าตัวอย่างข้อความกรีกหรือรัสเซียลงใน Excel ผ่าน CSV ด้วยการคลิกสองครั้งที่ไฟล์ (ซึ่งเป็นคำถาม: "ไม่มีปัญหาใด ๆ สำหรับผู้ใช้" ) สิ่งที่ฉันเสนอคือโซลูชันที่ใช้งานได้ซึ่งทำงานได้กับรุ่น Excel ทั้งหมดด้วยการคลิกสองครั้งและไม่จำเป็นต้องมีขั้นตอนเพิ่มเติมในเมนูของ Excel
Elmue

2
สิ่งนี้ไม่เพียง แต่ตอบคำถามไม่ถูกต้องหากระบุว่า CSV เป็น "มรดก" และ "ตาย" เพียงเพราะคุณไม่เห็นการใช้งานมันไม่ได้หมายความว่ามันจะตาย นอกจากนี้คุณชัดเจนไม่เข้าใจประวัติของมันหรือวันนี้ใช้กันอย่างแพร่หลาย สิ่งนี้ดีกว่า XML (เนื่องจากขนาดแพ็คเก็ตที่เล็กกว่า) และปัญหาในที่นี้คือวิธีที่ Microsoft ไม่ปฏิบัติตามมาตรฐานสำหรับรูปแบบ UTF8 คำตอบที่ถูกต้องคือใช้ open office ไม่ใช่ Microsoft เนื่องจาก Microsoft ไม่เคยมีการเข้ารหัสที่ดีมาก่อน
Jeremy

49

เราได้ใช้วิธีแก้ปัญหานี้:

  1. แปลง CSV เป็น UTF-16 LE
  2. แทรก BOM ที่จุดเริ่มต้นของไฟล์
  3. ใช้แท็บเป็นตัวคั่นฟิลด์

1
ขอบคุณ! ฉันลองคำตอบอื่น ๆ ทั้งหมดในกระทู้นี้ แต่การแปลงเป็น UTF-8 ไม่ได้ผล เมื่อฉันลอง UTF-16 กับ BOM มันทำงานได้ทันที
แหบแห้ง

สำหรับ Excel สำหรับ Mac 2011 ฉันประสบความสำเร็จกับ UTF-16 ไฟล์ csv เล็ก ๆ น้อย ๆ
multidynamic

ขอบคุณวิธีแก้ปัญหานี้ยอดเยี่ยมมากสำหรับการให้ Unicode csv แก่ผู้ใช้ของฉันที่สามารถเปิดใน Excel
user1073075

21

พบปัญหาเดียวกันกับไฟล์ CSV ที่สร้างโดย PHP Excel ละเว้น BOM เมื่อมีการกำหนดตัวคั่น"sep=,\n"ที่จุดเริ่มต้นของเนื้อหา (แต่แน่นอนหลังจาก BOM)

ดังนั้นการเพิ่ม BOM ( "\xEF\xBB\xBF") ที่จุดเริ่มต้นของเนื้อหาและกำหนดเซมิโคลอนเป็นตัวคั่นผ่านfputcsv($fh, $data_array, ";");จะเป็นการหลอกลวง


13

ฉันเคยมีปัญหาเดียวกันในอดีต (วิธีการผลิตไฟล์ที่ Excel สามารถอ่านและเครื่องมืออื่น ๆ สามารถอ่านได้) ฉันใช้ TSV ไม่ใช่ CSV แต่ปัญหาเดียวกันกับการเข้ารหัสเกิดขึ้น

ฉันไม่สามารถหาวิธีที่จะทำให้ Excel รู้จัก UTF-8 โดยอัตโนมัติและฉันไม่เต็มใจ / สามารถทำดาเมจกับผู้ใช้ไฟล์คำแนะนำที่ซับซ้อนได้ว่าจะเปิดอย่างไร ดังนั้นฉันจึงเข้ารหัสมันเป็น UTF-16le (พร้อม BOM) แทน UTF-8 ขนาดเป็นสองเท่า แต่ Excel สามารถจดจำการเข้ารหัสได้ และมันบีบอัดได้ดีดังนั้นขนาดจึงไม่ค่อยมี แต่เรื่องเศร้า


เป็นคำถามเก่า แต่ฉันดีใจที่ผู้คนยังตอบคำถาม ขอบคุณ. :)
Lyubomyr Shaydariv

1
@LyubomyrShaydariv: เนื่องจากฉันตอบคำถามนี้เพื่อนร่วมงานคนหนึ่งบอกฉันว่า Excel ล่าสุดระบุไฟล์ UTF-8 CSV หากพวกเขามี BOM เริ่มต้น ดังนั้นในไม่กี่ปีเมื่อทุกคนในโลก (หรือต่อไปทุกคนที่เราส่งไฟล์ไปยัง) อยู่ในรุ่นของ Excel หรือดีกว่านั้นผมอาจจะสามารถเปลี่ยนการเข้ารหัสของฉัน :-)
สตีฟเจสซอพ

แปลกสำหรับฉันมันไม่ทำงาน เปลี่ยนตัวละครให้เป็นสัญลักษณ์ภาษาจีน ... (พวกมันควรจะเป็นภาษาฮิบรู)
Veverke

ฉันมีตัวอักษรจีนใน Excel เมื่อฉันบันทึกใน "UTF-16 BE with BOM" เมื่อฉันลอง "UTF-16 LE กับ BOM" มันใช้งานได้! ฉันใช้ Sublime Text เพื่อทำการทดสอบ
Henno

12

คำถามเก่า แต่ห่าทางออกที่ง่ายที่สุดคือ:

  1. เปิด CSV ใน Notepad
  2. บันทึกเป็น -> เลือกการเข้ารหัสที่ถูกต้อง
  3. เปิดไฟล์ใหม่

1
คุณใช้ Excel รุ่นใด
Lyubomyr Shaydariv

1
สดใสก็ทำงานและแก้ปัญหา (อย่างน้อยสำหรับฉัน)
Auberon Vacher

1
ไม่เนื่องจากปัญหาคือให้ Excel เปิดไฟล์. csv เป็นไฟล์ csv ฉันหมายถึงฉันมีกระบวนการที่ฉันสร้างไฟล์ csv ผู้ใช้จะต้องเปิดไฟล์เท่านั้น ที่นี่เขา / เธอจะต้องทำมากกว่านั้น
Veverke

2
@Veverke หากคุณสร้างไฟล์เป็นประจำนี่ไม่ใช่ทางออกที่ดีที่สุด แต่ถ้ามันเป็นครั้งเดียวคำตอบนี้สมบูรณ์แบบ ใช้งานได้เนื่องจาก Notepad จะวาง BOM ไว้ที่จุดเริ่มต้นของไฟล์ UTF-8 หรือ UTF-16
Mark Ransom

ทำงานเหมือนจับใจ ((:
2925795

10

ในขณะที่ฉันโพสต์บนhttp://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html :

บอกผู้พัฒนาซอฟต์แวร์ที่รับผิดชอบสร้าง CSV เพื่อแก้ไขให้ถูกต้อง เพื่อเป็นการแก้ปัญหาอย่างรวดเร็วคุณสามารถใช้ gsed เพื่อแทรก UTF-8 BOM ที่จุดเริ่มต้นของสตริง:

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

คำสั่งนี้จะแทรก UTF-4 BOM หากไม่มี ดังนั้นจึงเป็นคำสั่ง idempotent ตอนนี้คุณควรจะสามารถดับเบิลคลิกไฟล์และเปิดใน Excel


ขอบคุณสิ่งนี้ได้รับการแก้ไข ฉันเพิ่งแปลง csv ';' แยกออกเป็น UTF-BOM ใน Notepad ++ และรู้ว่า excels เปิดอย่างถูกต้อง
RandomGuy

สิ่งที่ต้องการคือสิ่งที่แน่นอน! นี่คือตัวชี้ไปยังวิธีการดำเนินการนี้ใน PHP stackoverflow.com/questions/25686191/...
EFC

นี่เป็นวิธีแก้ปัญหาสำหรับ excel ซึ่งไม่รู้จักตัวแปล chareacters ในไฟล์ csv ดังนั้นการแก้ไขนี้เพื่อแก้ไขปัญหา excel
cobp

สิ่งนี้ใช้ได้กับ Excel 2007 Greek Version พร้อมเครื่องหมายจุลภาค ขอบคุณ.
NameOfTheRose

เปลี่ยนการเข้ารหัสเป็น 'UTF-16le' ใน fs.createWriteStream (ชื่อไฟล์, {การเข้ารหัส: 'UTF-16le'}) และ excel เปิดไฟล์ CSV อย่างถูกต้อง
rahul shukla

9

คุณสามารถแปลงไฟล์. csv เป็น UTF-8 ด้วย BOM ผ่าน Notepad ++:

  1. เปิดไฟล์ในNotepad ++++
  2. ไปที่เมนูEncodingConvert to UTF-8
  3. ไปที่เมนูFileSave
  4. ปิดแผ่นจดบันทึก ++
  5. เปิดไฟล์ใน Excel

ทำงานใน Microsoft Excel 2013 (15.0.5093.1000) MSO (15.0.5101.1000) 64 บิตจาก Microsoft Office Professional Plus 2013 บน Windows 8.1 พร้อมโลแคลสำหรับโปรแกรมที่ไม่ใช่ Unicode ที่ตั้งค่าเป็น "German (Germany)"


1
ทำในสิ่งที่คุณพูดไม่ทำงานเลย การแปลง / การเข้ารหัสการตั้งค่าชุดอักขระไม่มีอะไรทำงานในกรณีของฉัน นำเข้าไฟล์ไปยังแผ่นงาน google ดาวน์โหลดเป็น csv ทำงานได้อย่างไม่มีที่ติ การต้อนรับของคุณจาก 2045
pakalbekim

1
ฉันต้องแปลงมันด้วยการเข้ารหัส -> Cinvert ti UTF-8-BOM Excel รุ่น 2016
Igor Vuković

4

แมโคร vba อย่างง่ายสำหรับการเปิดไฟล์ข้อความและ csv utf-8

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

จุดกำเนิด: = 65001 คือ UTF-8 เครื่องหมายจุลภาค: เป็นจริงสำหรับไฟล์. csv กระจายเป็น colums

บันทึกใน Personal.xlsb เพื่อให้พร้อมใช้งานเสมอ ปรับแต่งแถบเครื่องมือ excel ให้เป็นส่วนตัวเพิ่มปุ่มเรียกมาโครและเปิดไฟล์จากที่นั่น คุณสามารถเพิ่มการจัดรูปแบบเพิ่มเติมให้กับแมโครเช่นการปรับคอลัมน์อัตโนมัติการจัดแนวและอื่น ๆ


2
ขอบคุณ น่าเสียดายนี่คือคำแนะนำสำหรับผู้ใช้ Excel ขั้นสูงจริง ๆ และสิ่งที่ฉันมุ่งหวังถามคำถามนี้คือการทำให้ Excel ทำเองโดยอัตโนมัติ
Lyubomyr Shaydariv

ฉันพยายามใช้ข้อมูลโค้ดนี้ แต่มันใช้ไม่ได้สำหรับฉัน ฉันใช้ Excel 2013
Sharunas Bielskis

3

เพียงเพื่อช่วยให้ผู้ใช้ที่สนใจเปิดไฟล์บน Excel ที่ได้รับเธรดนี้เหมือนฉัน

ฉันใช้ตัวช่วยสร้างด้านล่างและทำงานได้ดีสำหรับฉันนำเข้าไฟล์ UTF-8 ไม่โปร่งใส แต่มีประโยชน์หากคุณมีไฟล์อยู่แล้ว

  1. เปิด Microsoft Excel 2007
  2. คลิกที่ตัวเลือกแถบเมนูข้อมูล
  3. คลิกที่ไอคอนจากข้อความ
  4. นำทางไปยังตำแหน่งของไฟล์ที่คุณต้องการนำเข้า คลิกที่ชื่อไฟล์จากนั้นคลิกที่ปุ่มนำเข้า ตัวช่วยสร้างการนำเข้าข้อความ - หน้าต่างขั้นตอนที่ 1 หรือ 3 จะปรากฏขึ้นบนหน้าจอ
  5. เลือกประเภทไฟล์ที่อธิบายข้อมูลของคุณได้ดีที่สุด - คั่นหรือคงความกว้าง
  6. เลือก 65001: Unicode (UTF-8) จากรายการดรอปดาวน์ที่ปรากฏถัดจาก File กำเนิด
  7. คลิกที่ปุ่มถัดไปเพื่อแสดงหน้าต่างการนำเข้าข้อความ - ขั้นตอนที่ 2 หรือ 3
  8. วางเครื่องหมายถูกไว้ติดกับตัวคั่นที่ใช้ในไฟล์ที่คุณต้องการนำเข้าสู่ Microsoft Excel 2007 หน้าต่างแสดงตัวอย่างข้อมูลจะแสดงให้คุณเห็นว่าข้อมูลของคุณจะปรากฏอย่างไรตามตัวคั่นที่คุณเลือก
  9. คลิกที่ปุ่มถัดไปเพื่อแสดงตัวช่วยสร้างการนำเข้าข้อความ - ขั้นตอนที่ 3 จาก 3
  10. เลือกรูปแบบข้อมูลที่เหมาะสมสำหรับแต่ละคอลัมน์ของข้อมูลที่คุณต้องการนำเข้า คุณมีตัวเลือกที่จะไม่นำเข้าคอลัมน์ข้อมูลอย่างน้อยหนึ่งคอลัมน์ถ้าคุณต้องการ
  11. คลิกที่ปุ่มเสร็จสิ้นเพื่อเสร็จสิ้นการนำเข้าข้อมูลของคุณไปยัง Microsoft Excel 2007

ที่มา: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0


3

ใช่มันเป็นไปได้ ตามที่ระบุไว้ก่อนหน้านี้โดยผู้ใช้หลายคนดูเหมือนว่าจะมีปัญหากับ excel อ่านเครื่องหมายคำสั่งไบต์ที่ถูกต้องเมื่อไฟล์ถูกเข้ารหัสใน UTF-8 ด้วย UTF-16 ดูเหมือนว่าจะไม่มีปัญหาดังนั้นจึงเป็นถิ่นของ UTF-8 ทางออกที่ฉันใช้สำหรับสิ่งนี้คือการเพิ่ม BOM สองครั้ง สำหรับสิ่งนี้ฉันรันคำสั่ง sed ต่อไปนี้สองครั้ง:

sed -I '1s/^/\xef\xbb\xbf/' *.csv

ซึ่งสามารถแทนที่ wildcard ด้วยชื่อไฟล์ใด ๆ อย่างไรก็ตามสิ่งนี้นำไปสู่การกลายพันธุ์ของ sep = ที่จุดเริ่มต้นของไฟล์. csv ไฟล์. csv จะเปิดตามปกติใน excel แต่มีแถวพิเศษที่มี "sep =" ในเซลล์แรก "sep =" สามารถลบออกได้ในซอร์ส. csv เอง แต่เมื่อเปิดไฟล์ด้วย VBA ตัวคั่นควรระบุ:

Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)

รูปแบบ 6 เป็นรูปแบบ. csv ตั้งค่าท้องถิ่นเป็นจริงในกรณีที่มีวันที่ในไฟล์ หาก Local ไม่ได้ตั้งค่าเป็น True วันที่จะเป็นแบบอเมริกันซึ่งในบางกรณีจะทำให้รูปแบบ. csv เสียหาย


1
เมื่อเรียกใช้คำสั่ง sed ฉันได้รับ: "sed: ตัวเลือกที่ไม่ถูกต้อง - 'ฉัน'" ฉันคิดว่าควรเป็น 'i'
BiAiB

2

นี่คือวิธีการทำงานของฉัน:

vbFILEOPEN = "your_utf8_file.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

ที่สำคัญคือที่มา: = 65001


2

ใช่มันเป็นไปได้ เมื่อเขียนสตรีมที่สร้าง csv สิ่งแรกที่ต้องทำคือ:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)

คุณไม่ได้อ่านคำถาม! Lyubomyr Shaydariv wrote: "ฉันก็ลองระบุ UTF-8 BOM EF BB BF แต่ Excel ไม่สนใจสิ่งนั้น"
Elmue

นี่คือรหัสที่ใช้งานได้ หากคุณเขียนไฟล์ UTF-8 จากแอปพลิเคชั่น. Net ด้วยโอกาสในการขายนี้ Excel จะจดจำไฟล์เป็น UTF8
zax

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

2

รายการคำตอบที่น่าทึ่งอย่างแท้จริง แต่เนื่องจากมีคำตอบที่ดีหายไปฉันจะพูดถึงที่นี่: เปิดไฟล์ csv ด้วยgoogle ชีตแล้วบันทึกกลับไปยังคอมพิวเตอร์ของคุณในรูปแบบไฟล์ excel

ในทางตรงกันข้ามกับ Microsoft Google มีการจัดการเพื่อรองรับไฟล์ UTF-8 csv ดังนั้นจึงเป็นเพียงการเปิดไฟล์ที่นั่น และรูปแบบการส่งออกเป็น excel ก็ใช้งานได้เช่นกัน ดังนั้นแม้ว่านี่อาจไม่ใช่โซลูชันที่ต้องการสำหรับทุกคน แต่ก็ค่อนข้างปลอดภัยและจำนวนคลิกไม่สูงเท่าที่ควรโดยเฉพาะเมื่อคุณลงชื่อเข้าใช้ Google อยู่แล้ว


2

นี่ไม่ใช่การตอบคำถามอย่างถูกต้อง แต่เนื่องจากฉันสะดุดในเรื่องนี้และวิธีแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉันหรือมีข้อกำหนดที่ฉันไม่สามารถตอบสนองได้นี่เป็นอีกวิธีหนึ่งในการเพิ่ม BOM เมื่อคุณเข้าถึง vim:

vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv

2

สวัสดีฉันใช้ ruby ​​บนรางสำหรับรุ่น csv ในแอปพลิเคชันของเราเราวางแผนที่จะใช้หลายภาษา (I18n) และเราประสบปัญหาขณะรับชมเนื้อหา I18n ในไฟล์ CSV ของ windows excel

ทำได้ดีกับ Linux (Ubuntu) และ mac

เราพบว่า windows excel จำเป็นต้องนำเข้าข้อมูลอีกครั้งเพื่อดูข้อมูลจริง ในขณะที่นำเข้าเราจะมีตัวเลือกเพิ่มเติมให้เลือกชุดอักขระ

แต่สิ่งนี้ไม่สามารถให้การศึกษาแก่ผู้ใช้แต่ละคนและทุกคนดังนั้นทางออกที่เรามองหาคือการเปิดเพียงแค่ดับเบิลคลิก

จากนั้นเราระบุวิธีการแสดงข้อมูลโดยการเปิดโหมดและ BOM ในหน้าต่างเก่งด้วยความช่วยเหลือของ aghuddleston สรุปสาระสำคัญ เพิ่มที่อ้างอิง

ตัวอย่างเนื้อหา I18n

ใน Mac และ Linux

สวีเดน: Förnamnอังกฤษ: ชื่อ

ใน Windows

สวีเดน: FÃ :rnamn อังกฤษ: ชื่อ

def user_information_report(report_file_path, user_id)
    user = User.find(user_id)
    I18n.locale = user.current_lang
    open_mode = "w+:UTF-16LE:UTF-8"
    bom = "\xEF\xBB\xBF"
    body user, open_mode, bom
  end

def headers
    headers = [
        "ID", "SDN ID",
        I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
        I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
        I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
        I18n.t('sys_phone_number')
    ]
  end

def body tenant, open_mode, bom
    File.open(report_file_path, open_mode) do |f|
      csv_file = CSV.generate(col_sep: "\t") do |csv|
        csv << headers
        tenant.patients.find_each(batch_size: 10) do |patient|
          csv <<  [
              patient.id, patient.patientid,
              patient.first_name, patient.last_name, "#{patient.dob}",
              "#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
              "#{patient.city}", "#{patient.state}",  "#{patient.zip}",
              "#{patient.phone_number}"
          ]
        end
      end
      f.write bom
      f.write(csv_file)
    end
  end

สิ่งสำคัญที่ควรทราบที่นี่คือโหมดเปิดและ bom

open_mode = "w +: UTF-16LE: UTF-8"

bom = "\ xEF \ xBB \ xBF"

ก่อนเขียน CSV แทรก BOM

f.write bom

f.write (csv_file)

Windows และ Mac

ไฟล์สามารถเปิดได้โดยตรงโดยดับเบิลคลิก

Linux (อูบุนตู)

ในขณะที่เปิดไฟล์ขอตัวเลือกคั่น -> เลือก“ TAB” ป้อนคำอธิบายรูปภาพที่นี่


1

ฉันประสบปัญหาเดียวกันเมื่อสองสามวันที่ผ่านมาและไม่สามารถหาวิธีแก้ปัญหาใด ๆ เพราะฉันไม่สามารถใช้import from csvคุณสมบัตินี้ได้เพราะทำให้ทุกอย่างกลายเป็นสตริง

วิธีการแก้ปัญหาของฉันคือการก่อนเปิดไฟล์ที่มี notpad ++ change the encode to ASCIIและ จากนั้นเพิ่งเปิดไฟล์ใน excel และทำงานได้ตามที่คาดไว้


1

ใน php คุณเพิ่งเพิ่ม $ bom เป็น $ csv_string ของคุณ:

$bom = sprintf( "%c%c%c", 239, 187, 191); // EF BB BF
file_put_contents( $file_name, $bom . $csv_string );

ทดสอบกับ MS Excel 2016, php 7.2.4


0

นี่เป็นคำถามเก่า แต่ฉันเพิ่งพบว่ามีปัญหาที่คล้ายกันและวิธีแก้ปัญหาอาจช่วยผู้อื่น:

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

ใช้การเข้ารหัส UTF-8 เมื่อคุณสร้าง StreamWriter ของคุณ แค่นั้นแหละ.

ตัวอย่าง:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}

@ elmue สนใจที่จะอธิบายรายละเอียดเล็ก ๆ น้อย ๆ ? การส่งออก CSV โดยใช้การเข้ารหัสที่ถูกต้องเพื่อเริ่มต้นทำให้แน่ใจว่าไม่มีปัญหาความเข้ากันได้กับ Excel ในภายหลังในเวิร์กโฟลว์
เร็กซ์

รหัสไม่ถูกต้องเนื่องจากคุณไม่ต้องการเอาท์พุทปิด () หากคุณมีคำสั่ง use () นอกเหนือจาก Inport ของ Excel CSV นั้นดั้งเดิมมาก ฉันจะไม่ใช้มันเลย หากคุณต้องการนำเข้าใน Excel ให้ใช้ตาราง HTML แทนและเปิดใน Excel
Elmue

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

ดำเนินการต่อ ...อย่างไรก็ตามสถานการณ์ต่าง ๆ มีข้อกำหนดที่แตกต่างกันและตัวอย่างของฉันแสดงวิธีการเข้ารหัสตามที่ OP ร้องขออย่างถูกต้อง
Rex

โปรดอ่านคำถามเดิมอีกครั้ง: "ฉันได้ลองระบุ UTF-8 BOM EF BB BF แล้ว แต่ Excel ไม่สนใจสิ่งนั้น" ฉันทดสอบเหมือนกันและได้ผลลัพธ์เดียวกัน: Excel ไม่รู้จัก UTf8 BOM ลองมัน! เขียนไฟล์ CSV และใส่ตัวอักษรกรีกหรือรัสเซียลงไป จากนั้นเปิดใน Excel และคุณจะได้รับ garbarge ดังนั้นคำตอบของคุณไม่ได้แก้อะไรเลย
Elmue

0

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

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

มันง่ายมากที่จะทำตรงกันข้ามวิศวกร SYLK ด้วยการสร้างสเปรดชีตอย่างง่ายและบันทึกเป็น SYLK แล้วอ่านด้วยโปรแกรมแก้ไขข้อความ บล็อกแรกคือส่วนหัวและรูปแบบตัวเลขมาตรฐานที่คุณจะจำได้ (ซึ่งคุณเพิ่งสำรอกไฟล์ทุกไฟล์ที่คุณสร้าง) จากนั้นข้อมูลก็เป็นเพียงพิกัด X / Y และค่า


0
  1. ดาวน์โหลดและติดตั้ง LibreOffice Calc
  2. เปิดไฟล์ csv ที่คุณเลือกใน LibreOffice Calc
  3. ขอบคุณสวรรค์ที่ตัวช่วยสร้างข้อความนำเข้าปรากฏขึ้น ...
  4. ... เลือกตัวเลือกตัวคั่นและการเข้ารหัสอักขระ
  5. เลือกข้อมูลผลลัพธ์ใน Calc และคัดลอกวางไปยัง Excel

0

ฉันกำลังสร้างไฟล์ csv จากแอปพลิเคชัน C # แบบง่ายและมีปัญหาเดียวกัน วิธีแก้ปัญหาของฉันคือตรวจสอบให้แน่ใจว่าไฟล์นั้นเขียนด้วยการเข้ารหัส UTF8 เช่นนั้น:

// Use UTF8 encoding so that Excel is ok with accents and such.
using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
{
    SaveCSV(writer);
}

ฉันเดิมมีรหัสต่อไปนี้ด้วยสำเนียงที่ดูดีใน Notepad ++ แต่ถูกสับสนใน Excel:

using (StreamWriter writer = new StreamWriter(path))
{
    SaveCSV(writer);
}

ระยะทางของคุณอาจแตกต่างกัน - ฉันใช้. NET 4 และ Excel จาก Office 365


0

วิธีแก้ปัญหาการทำงานสำหรับ Office 365

  • บันทึกในUTF-16(ไม่มี LE, BE)
  • ใช้ตัวคั่น \t

รหัสใน PHP

$header = ['číslo', 'vytvořeno', 'ěščřžýáíé'];
$fileName = 'excel365.csv';
$fp = fopen($fileName, 'w');
fputcsv($fp, $header, "\t");
fclose($fp);

$handle = fopen($fileName, "r");
$contents = fread($handle, filesize($fileName));
$contents = iconv('UTF-8', 'UTF-16', $contents);
fclose($handle);

$handle = fopen($fileName, "w");
fwrite($handle, $contents);
fclose($handle);

-1

ก่อนอื่นให้บันทึกสเปรดชีต Excel เป็นข้อความ Unicode เปิดไฟล์ TXT โดยใช้ Internet explorer และคลิก "บันทึกเป็น" การเข้ารหัส TXT - เลือกการเข้ารหัสที่เหมาะสมเช่นสำหรับ Win Cyrillic 1251


-1

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

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