ความแตกต่างที่แท้จริงระหว่าง Excel CSV และ CSV มาตรฐาน


16

อะไรคือความแตกต่างที่แท้จริงระหว่าง Excel CSV และ CSV มาตรฐาน?

ตัวอย่างเช่นเมื่อจัดการคอลัมน์ที่มีตัวแบ่งบรรทัดภายในเซลล์เดียวพวกเขาจะเข้ารหัสแตกต่างกันอย่างไร

คำตอบ:


19

ขึ้นอยู่กับสิ่งที่คุณกำหนดเป็น "มาตรฐาน" อย่างแน่นอน เท่าที่ฉันเกี่ยวข้อง Excel จะปฏิบัติตามกฎที่ระบุไว้ในRFC 4180 "รูปแบบทั่วไปและประเภท MIME สำหรับไฟล์ CSV"

พิจารณาตารางที่เซลล์แรกในแถวแรกมีตัวแบ่งสองบรรทัด ใน Excel จะมีลักษณะดังต่อไปนี้:

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | col1, line1a  |            |            |
|   | col1, line1b  |            |            |
|   | col1, line1c  | col2, row1 | col3, row1 |
| 2 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

ตอนนี้ Excel จะส่งออกสิ่งนี้อย่างไร มาดูกัน - เครื่องมือแก้ไขข้อความจะแสดงสิ่งนี้:

"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"

ไม่ซับซ้อนมาก มันแทรก carriage return (hex 0D) ที่มีการแบ่งบรรทัดในเซลล์ของเรา ทุกเซลล์ล้อมรอบด้วยเครื่องหมายคำพูดคู่ นอกจากนี้แถวจริงจะถูกคั่นด้วยการขึ้นบรรทัดใหม่

หากต้องการวิเคราะห์คำนี้อย่างถูกต้องจำเป็นต้องใช้โปรแกรมแยกวิเคราะห์ CSV

  • ละเว้นการขึ้นบรรทัดใหม่เมื่อปรากฏภายในเครื่องหมายคำพูดคู่ (เช่นเซลล์)
  • ไม่เพิกเฉยต่อการขึ้นบรรทัดใหม่เมื่อมันปรากฏขึ้นนอกเครื่องหมายคำพูดคู่

หากไม่ทำเช่นนั้นคุณจะพบสิ่งที่อ่านไม่ออกเช่นนี้โปรดทราบว่าขณะนี้มีสี่บรรทัดแทนที่จะเป็นสองบรรทัดเพราะไม่สามารถเพิกเฉยต่อการแบ่งบรรทัด

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | "col1, line1a |            |            |
| 2 | col1, line1b  |            |            |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

แต่มาดูกันว่า RFC พูดว่าอะไรบางที Excel อาจจะถูกต้อง?

ฟิลด์ที่มีตัวแบ่งบรรทัด (CRLF) เครื่องหมายคำพูดคู่และเครื่องหมายจุลภาคควรอยู่ในเครื่องหมายคำพูดคู่

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


@shhck: ทำไมฉันถึงเห็น csv parser implementations แยก "excel" csv กับ "csv"? ฉันยังพบว่า excel มีการใช้งานที่แข็งแกร่ง
user157195

@ user157195 ขึ้นอยู่กับตัวแยกวิเคราะห์คุณควรอ่านในเอกสารประกอบว่าทำไมจึงมีความแตกต่างระหว่างอินพุต Excel และที่ไม่ใช่ของ Excel ฉันจะไม่เห็นว่าทำไมควรมีอย่างใดอย่างหนึ่ง ฉันเพิ่งรู้สิ่งนี้จากRซึ่งปฏิบัติต่อ Excel CSV เหมือนกัน อย่างไรก็ตามมันสามารถอ่าน XLS ได้เช่นกัน
slhck

2
ในฐานะคนที่อ่านไฟล์ CSV ที่สร้างจาก Excel แบบเป็นโปรแกรมมาหลายปีในทุกรูปแบบและทุกขนาดฉันสามารถยืนยันได้ว่า slhck นั้นถูกต้อง 100% - Excel สร้างไฟล์ CSV "มาตรฐาน" 100% ทุกครั้ง
Mark Henderson

@ Farseeker ขอบคุณสำหรับการยืนยัน! (และคุณมีตัวแทน1,337ตอนนี้!)
slhck

5
ข้อควรระวัง! ในประเทศที่ใช้ ',' เป็นจุดทศนิยม Excel จะ "ฉลาดมาก" และใช้ ';' ตัวคั่น สิ่งนี้จะช่วยให้ Zee Germanz ไม่เห็น "เครื่องหมายคำพูด" มากเกินไป "ใน"; "พวกเขา"; "ไฟล์" น่าเสียดายถ้าพวกเขาส่งไปที่สำนักงานในสหราชอาณาจักรจะได้รับ AllSmooshedUpIntoASingleCellOnEveryLine สุกใส
ลุค Usherwood

-1

ความเข้าใจของฉันจากการใช้งาน csv ดั้งเดิมคือฟิลด์ข้อความทั้งหมดอยู่ในเครื่องหมายคำพูดและตัวเลขไม่จำเป็นต้องเป็น Excel ไม่ทำเช่นนี้และหากคุณพยายามอัปโหลดไฟล์ csv ที่สร้างจาก Excel ของคุณบนแพลตฟอร์มที่ไม่ใช่ไมโครซอฟท์พวกเขาจะล้มเหลว นี่คือวิธีการแบบไมโครซอฟท์มาตรฐานละเว้นการทำงานร่วมกันและมุ่งเน้นไปที่สุ่มสี่สุ่มห้าตามกฎ สิ่งที่คล้ายกันเกิดขึ้นกับ IE พวกเขาปฏิบัติตามกฎ html / css อย่างถูกต้องสำหรับคุณลักษณะการเติมและระยะขอบและละเว้นข้อเท็จจริงที่ว่าทุกเว็บเพจที่มีอยู่ ผลลัพธ์เกือบทุกหน้าเว็บมีกฎพิเศษสำหรับ IE ฉันค้นหาไฟล์ csv ที่สร้างโดย excel ที่ไร้ประโยชน์และใช้คอลัมน์ของ "concatenate" ฟังก์ชั่นเพื่อสร้างด้วยตนเองอย่างถูกต้อง

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