การจัดรูปแบบ CSV ที่คั่นด้วยจุลภาคเพื่อบังคับให้ Excel ตีความค่าเป็นสตริง


64

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

เช่น:

"141", "10/11/2002", "350.00", "1311742251"

Excel พยายาม "แปลงอย่างชาญฉลาด" ทั้งหมดเหล่านี้ให้เป็นรูปแบบวันที่ / หมายเลขดั้งเดิม มีวิธีแก้ไขไหม?


แก้ไข: ชี้แจงเจตนาของคำถามของฉันขอโทษสำหรับความสับสน

คำตอบ:


67

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

"=""Data Here"""

เช่น...

20,       5.5%,      "0404 123 351", "3-6",  "=""123"""
[number]  [percent]  [number]        [date]  [string]  <-- how Excel interprets

นอกจากนี้ยังใช้งานได้ใน Google Spreadsheet แต่ไม่แน่ใจว่าแอปสเปรดชีตอื่นสนับสนุนสัญลักษณ์นี้หรือไม่

หากคุณสงสัยว่าข้อมูลใด ๆ ที่อาจมีคำพูดของตัวเองคุณต้องหนีสองครั้งเช่นนี้ ...

"=""She said """"Hello"""" to him"""



(แก้ไข: อัปเดตพร้อมการแก้ไขขอบคุณ DMA57361!)


เยี่ยมมากเราต้องเปลี่ยนข้อมูล .. ถอนหายใจ
ราคาแพง

4
คอลัมน์สุดท้ายนั้นควรจะ"=""123"""เกิดขึ้นไม่ดี ฟิลด์ที่มี a "ต้องเป็นตัวคั่นและ"s ในฟิลด์นั้นหนีด้วย"s อื่น
DMA57361

@ DMA57361 จริง ๆ แล้ววิธีที่เขามีมันก็เป็นอีกสองช่องด้านข้างมันที่ขาดเครื่องหมายเท่ากับก่อนหน้า สิ่งที่เขาใส่นั่นคือการตั้งค่าสูตรของเซลล์นั้นเพื่อส่งคืนสตริง หากต้องการหลีกเลี่ยงสิ่งนี้คุณสามารถตั้งค่าชนิดข้อมูลของเซลล์เป็น "ข้อความ"
พัฒนา

2
@Breakthrough ตารางนั้นมีไฟล์ CSV ไม่ใช่ฟิลด์ Excel ค่าสุดท้าย="123"ไม่ใช่ฟิลด์ CSV ที่ถูกต้องเพราะมีอักขระตัวคั่นฟิลด์" โดยไม่ต้องลบหรือฟิลด์อย่างถูกต้อง ข้อเท็จจริงที่ว่า Excel เกิดขึ้นกับการอ่านมันเนื่องจากเป็นสูตรที่บริสุทธิ์จนถึง Excel และไม่มีอะไรเกี่ยวข้องกับไฟล์ CSV
DMA57361

2
@PriceChild จุดคำถามเดิมของฉัน (ที่ฉันไม่ได้จริงๆอธิบายดีมาก) เป็นจริงวิธีการจัดรูปแบบ CSV ที่จะทำให้มันเป็นไปอย่างง่ายดายสำหรับผู้ใช้ และนี่คือคำตอบที่ฉันเจอและต้องการโพสต์ DMA57361 ก็นำการแก้ไขที่เป็นประโยชน์มาด้วยเช่นกันขอบคุณ!
Simon East

36

เช่นเดียวกับหลาย ๆ ครั้งที่ฉันต้องดิ้นรนกับการตัดสินใจแบบเดียวกันกับที่ Microsoft ทำและลองใช้วิธีแก้ปัญหาที่แนะนำหลายอย่าง

สำหรับ Excel 2007 สิ่งต่อไปนี้จะไป:

  • การใส่ค่าทั้งหมดในเครื่องหมายคำพูดคู่จะไม่ช่วย
  • การใส่=ก่อนค่าทั้งหมดหลังจากใส่ลงใน quutes สองเท่าจะช่วยได้ แต่ทำให้ไฟล์ csv ไร้ประโยชน์สำหรับแอปพลิเคชันอื่น ๆ ส่วนใหญ่
  • การใส่เครื่องหมายวงเล็บรอบเครื่องหมายคำพูดคู่รอบค่าทั้งหมดเป็นขยะ
  • การเว้นช่องว่างก่อนค่าทั้งหมดก่อนที่จะใส่เครื่องหมายคำพูดคู่ล้อมรอบมันป้องกันการแปลงเป็นวันที่ แต่ไม่ได้ป้องกันการตัดส่วนของศูนย์นำหน้าหรือต่อท้าย
  • การใส่เครื่องหมายคำพูดเดี่ยวไว้ข้างหน้าของค่าจะทำงานเฉพาะเมื่อป้อนข้อมูลภายใน Excel

อย่างไรก็ตาม:

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

เช่น:

"<tab character><some value>","<tab character><some other value>"

โปรดทราบว่าอักขระแท็บจะต้องอยู่ในเครื่องหมายคำพูดคู่ แก้ไข: ปรากฎว่าอัญประกาศคู่ไม่จำเป็นแม้แต่

การคลิกสองครั้งที่ไฟล์ csv สามารถเปิดไฟล์ในรูปแบบสเปรดชีตใน Excel โดยแสดงค่าทั้งหมดที่ถือว่าเหมือนด้านบนเช่นข้อมูลตัวอักษร ตรวจสอบให้แน่ใจว่าได้ตั้งค่า Excel ให้ใช้'.' เป็นจุดทศนิยมและไม่ใช่','หรือทุกบรรทัดของไฟล์ csv จะลงท้ายด้วยข้อความเดียวในเซลล์แรกของแต่ละแถว เห็นได้ชัดว่า Microsoft คิดว่า CSV หมายถึง "ไม่ใช่ทศนิยม"


เคล็ดลับแท็บนี้ช่วยวันของฉันได้ Excel กำลังแปลงค่าตัวเลขที่ยาวจริง ๆ ให้เป็นตัวเลขและสูญเสียตัวเลขทั้งหมดหลังจากวันที่ 15 จัดการเพื่อให้ Excel ถือว่าเป็นข้อความด้วยคำนำหน้าแท็บ ทำงานเพื่อตัวเลขเช่นกันไม่ใช่แค่วันที่
Markus Yrjölä

มันมีประโยชน์จริง ๆ ขอบคุณ!
Flavio

22

การใช้ฟังก์ชั่นการนำเข้าของ Excel ช่วยให้คุณสามารถระบุรูปแบบ (อัตโนมัติ, ข้อความหรือวันที่) แต่ละคอลัมน์ควรถูกตีความว่าเป็นและไม่ต้องการการแก้ไขใด ๆ กับไฟล์ข้อมูล

คุณสามารถพบว่ามันเป็นData→การGet External Data→การFrom Textใน Excel 2007/2010
หรือData→การImport External Data→การImport Dataใน Excel 2003

นี่คือภาพของตัวช่วยสร้างการนำเข้าข้อความ Excel 2003 ในการทำงานกับข้อมูลตัวอย่างที่ระบุแสดงให้ฉันเห็นว่าการนำเข้าคอลัมน์สองหลังหลังเป็นข้อความ:

Excel 2003: ตัวช่วยสร้างการนำเข้าข้อความในขั้นตอนที่ 3 - ชนิดข้อมูล


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

@Simon คุณกำลังเขียนสคริปต์อะไรอยู่? วิธีใดที่คุณสามารถนำไปสร้างเป็นไฟล์ Excel ได้โดยตรงแทนที่จะไปที่ฟอร์แมตกลาง?
DMA57361

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

1
มีคำถามสองสามข้อเกี่ยวกับ SO → PHP, Excel, สองสามข้อแรกที่ฉันได้ลองทั้งหมดมีคำตอบที่ชี้ไปที่PHP Excelดังนั้นมันอาจคุ้มค่ากับการดู
DMA57361

นั่นเป็นประโยชน์อย่างมากหลังจากอ่านแอปพลิเคชันค่อนข้างน้อย
greg121

1

ตัวอย่างจาก Simon ไม่ได้ผลสำหรับฉันและฉันสงสัยว่ามันเป็นความแตกต่างทางภาษา ใน C # นี่คือสิ่งที่สตริงรูปแบบการทำงานของฉันดูเหมือนว่า:

var linebreak = (i++ == list.Count) ? "" : "\r\n";

csv += String.Format("=\"{0}\",{1},{2},{3},=\"{4}\"{5}",
    item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);

และนี่คือลักษณะของไฟล์เอาต์พุต:

="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""

ตามที่เห็นรูปแบบในไฟล์ที่ส่งออก="VALUE",ไม่ได้เป็น"=""VALUE""",ที่ฉันเชื่อว่าอาจเป็นแบบแผนของ Visual Basic

ฉันใช้ Excel 2010 โดยบังเอิญ Google ชีตจะไม่เปิด / แปลงไฟล์ที่จัดรูปแบบด้วยวิธีนี้ มันจะทำงานถ้าคุณลบเครื่องหมายเท่ากับ"VALUE",- Excel จะยังคงเปิดไฟล์ แต่ไม่สนใจข้อเท็จจริงที่ว่าคุณต้องการให้คอลัมน์ของคุณเป็นสตริง


-2

วิธีง่ายๆในการบังคับให้ Excel แปลวันที่เป็นข้อความคือการใส่เครื่องหมายคำพูดเดี่ยวไว้หน้าวันที่แทนการใช้เครื่องหมายคำพูดแบบเต็มเช่นเดียวกับใน:

'10 / 11/2002

หากคุณสามารถนำเข้า CSV แทนการเปิดคุณสามารถบอก Excel ว่าควรจัดรูปแบบใดในแต่ละคอลัมน์ มีลักษณะที่คำถามนี้ผมถาม


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