การนำเข้า CSV ของ CSV ดำเนินการกับสตริงตัวเลขที่ยกมาเป็นค่าตัวเลขไม่ใช่สตริง


13

ฉันมีเว็บแอปพลิเคชันที่ส่งออกข้อมูลไปยังไฟล์ CSV นี่คือตัวอย่างแถวหนึ่งของไฟล์ CSV ที่เป็นปัญหา:

28,"65154",02/21/2013 00:00,"false","0316295","8316012,8315844","MALE"

เนื่องจากฉันไม่สามารถโพสต์ภาพฉันจะต้องอธิบายผลลัพธ์ใน Excel ฟิลด์ "0316295" จะเปลี่ยนเป็นตัวเลขและ 0 นำหน้าจะหายไป "8316012,8315844" ถูกตีความว่าเป็นหมายเลขเดียว: 83,160,128,315,844 เห็นได้ชัดว่าไม่ใช่ผลลัพธ์ที่ตั้งใจ

ฉันเคยเห็นคนแนะนำคำพูดเดียวชั้นนำสำหรับกรณีดังกล่าว แต่ก็ไม่ได้ผล

28,"65154",02/21/2013 00:00,"false","'0316295","'8316012,8315844","MALE"

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

การนำเข้าไม่เหมือนกับการพิมพ์ แต่ดูเหมือนว่า

ใครมีทางออกที่นี่?


คุณสามารถนำเข้าโดยใช้ LibreOffice หรืออะไรก็ได้ที่เป็นประโยชน์หรือไม่ ฉันเพิ่งนำเข้าและได้รับ: 28 65154 02/21/2013 00:00 false 0316295 8316012,8315844 MALE (ถ้าคุณสามารถอ่านได้ ... ?)
FreudianSlip

คำถามนี้คล้ายกันและเสนอวิธีแก้ปัญหาที่ดี: superuser.com/questions/234997/…
Brad Patton

@FreudianSlip ไม่เราไม่สามารถใช้โซลูชันของบุคคลที่สามได้ ผู้ใช้คลิกที่ปุ่ม "ดาวน์โหลด CSV" และไฟล์จะเปิดขึ้นใน Excel นั่นคือสภาพแวดล้อมที่เรากำลังเผชิญอยู่ ไม่สามารถทำให้ซับซ้อนได้จริงๆ
Michael Oryl

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

คุณควบคุมเว็บแอพอย่างน้อยที่สุดงั้นเหรอ? คุณจะนำโซลูชันไปใช้อย่างโปร่งใสจากผู้ใช้อย่างไร ฉันได้อัปเดตคำตอบของฉันแล้วดังนั้นจึงควรจัดการกับค่าด้วยเครื่องหมายจุลภาค
Alex P.

คำตอบ:


10

สิ่งนี้น่าจะใช้ได้

28,"65154",02/21/2013 00:00,"false",="0316295","=""8316012,8315844""","MALE"

ไม่นั่นจะทำให้ค่ามีตัวเลขสองตัวอยู่ในนั้น เราได้รับ = "1234567 โดยไม่มีเครื่องหมายอัญประกาศ แต่ใช้งานได้กับตัวเลขที่เรียบง่ายกว่านี้
Michael Oryl

1
หากคุณควบคุมเว็บแอปพลิเคชันคุณสามารถนำการส่งออกไปใช้ในรูปแบบSYLK en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) มีการควบคุมการแสดงข้อมูลได้ดีกว่ามาก ถ้าไม่ใช่ - คุณสามารถสร้างสคริปต์ตัวแปลงได้อย่างง่ายดาย
Alex P.

2
อัปเดตคำตอบดังนั้นจึงควรจัดการค่าด้วยเครื่องหมายจุลภาค
Alex P.

ที่จัดการค่าคั่นด้วยเครื่องหมายจุลภาคอย่างถูกต้อง ขอบคุณ
Michael Oryl

ขอบคุณ วิธีนี้แก้ปัญหาด้วยการนำเข้าเลขฐานสิบหกเช่นกัน Excel แทนที่00E3ด้วย 0 (0 * 10 ^ 3) และแสดงเป็น sci (0.00E + 00) มันจริงไม่เหมือนกันสำหรับการได้โดยไม่ต้อง"00e3" =แต่="00e3"ทำงานได้อย่างสมบูรณ์แบบ (เปิด CSV ด้วย Excel 2010)
2559

12

เพื่อรักษาศูนย์นำหน้าคุณสามารถกำหนดรูปแบบของคอลัมน์เฉพาะนั้นเป็นข้อความในตัวช่วยสร้างการนำเข้าข้อความ

  1. เริ่มข้อความช่วยสร้างการนำเข้าโดยไปที่ข้อมูลแท็บและคลิกจากข้อความ
  2. เลือกไฟล์ CSV ที่คุณต้องการนำเข้า
  3. เลือกคั่นและตีถัดไป
  4. ยกเลิกการเลือกแท็บ (ค่าเริ่มต้น) เลือกจุลภาค ตรวจสอบให้แน่ใจข้อความคัดเลือก"มีการตั้งค่า hit ถัดไป
  5. ที่นี่คุณสามารถระบุรูปแบบได้ คลิกที่ส่วนหัวของคอลัมน์ที่มีศูนย์นำหน้าซึ่งคุณต้องการรักษาไว้ เลือกข้อความ (ดูภาพด้านล่าง)

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

  6. กดปุ่มFinishแล้วเลือกตำแหน่งที่เหมาะสมกับข้อมูลของคุณ ผลตัวอย่าง:

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

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


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

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

นั่นเป็นจุดที่ดีมาก ขอบคุณสำหรับการชี้ให้เห็นว่า มันอาจมีประโยชน์ในอนาคต
Michael Oryl

4

Excel ใช้ค่าตัวเลขที่ขึ้นต้นด้วยอักขระแท็บเป็นข้อความ

<tabchar>000000100000200000,ABC,DEF

จะปรากฏเป็น:

000000100000200000|ABC|DEF

| เป็นขอบเขตของเซลล์ (เพื่อจุดประสงค์ภาพประกอบ) ตัวอย่างเช่นหากระบบของคุณสร้างไฟล์ CSV โดยใช้ชุดอักขระ utf-8 คุณสามารถเพิ่ม&#x0009;(Tab Char ใน Hex) ก่อนค่าตัวเลขของคุณเพื่อบังคับให้ excel แปลเป็นข้อความ


ลบช่องว่างก่อนเครื่องหมายโคลอนกึ่งในการแสดง Hex ฉันไม่รู้วิธีหลบตัวอักษร Hex Tab ในคำตอบดังนั้นฉันจึงพิมพ์ผิดโดยเจตนา
Madeyedexter

1
ฉันหนีไปแล้ว และฉันได้เรียนรู้สิ่งใหม่ขอบคุณ ฉันต้องเพิ่มหัวข้อนี้ลงในงานที่ฉันชอบ :)
nixda

3

Excel จะตรวจจับรูปแบบของฟิลด์ CSV โดยอัตโนมัติเว้นแต่คอลัมน์ CSV อยู่ในรูปแบบนี้:

"=""Data Here"""

ใช้ได้กับแผ่นงาน Google


0

คุณต้องใช้ฟังก์ชัน "ข้อมูล -> รับข้อมูลภายนอก -> นำเข้าข้อความจากไฟล์" ใน Excel เพื่อให้แสดงเป็นข้อความ นี่คือตัวช่วยสร้างการนำเข้าข้อความ @Kaze ที่กล่าวถึง

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


0

ลองใช้ฟังก์ชั่นใหม่ทั้งหมดเพื่อหาค่าที่เกิดความสับสน ตัวอย่างเช่น = clean ("12345678901234567890") มันใช้งานได้สำหรับตัวเลขวันที่เวลา ฯลฯ ฉันขอเตือนว่าเนื่องจากนี่ไม่ใช่จุดประสงค์ทั้งหมดของฟังก์ชั่นนี้ที่จะหยุดทำงานกับเวอร์ชันใหม่ ฯลฯ

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