หยุด Excel จากการแปลงค่าข้อความบางอย่างให้เป็นวันที่โดยอัตโนมัติ


526

ใครบ้างที่จะเกิดขึ้นทราบว่ามีโทเค็นฉันสามารถเพิ่มไปยัง CSV ของฉันสำหรับข้อมูลบางอย่างเพื่อ Excel ไม่พยายามที่จะแปลงเป็นวันที่?

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


120
ใช่เช่นเมื่อไฟล์ที่มีชื่อผู้ใช้ 10,000 คนมีหนึ่งชื่อเช่น "april25" ซึ่งจะถูกแปลงเป็นวันที่และในที่สุดจะได้รับการประมวลผลเป็น "apr-25" ทำให้เกิดข้อผิดพลาด "ไม่พบชื่อผู้ใช้" เพราะคุณไม่ได้ คาดว่า Excel จะแปลงค่าเดียวเป็นวันที่ 4000 บันทึกลงในไฟล์ในขณะที่ออกจากข้อความที่เหลือ รหัสการอ่าน CSV อะไรที่อ่อนแอ; จริง ๆ แล้วมันไม่ควรที่จะเดาประเภทที่ยึดตามเร็กคอร์ด X แรกและยึดติดอยู่กับมัน? หรือทิ้งข้อความทั้งหมดไว้ ถ้าฉันต้องการฟอร์แมตเป็น "ทั่วไป" ฉันสามารถเลือกได้ในภายหลัง ด้วยการสมมติว่า "ทั่วไป" ถูกต้องตั้งแต่เริ่มต้นจะทำให้เกิดความเสียหายของข้อมูลที่เป็นข้อความ
Triynko

ฉันมีปัญหาเมื่อทำการคัดลอกและวาง สำหรับการค้นหาโซลูชันทั้งหมดให้เลือกคอลัมน์เป้าหมายตั้งค่าเป็นรูปแบบสตริง / ข้อความจากนั้นคัดลอกแหล่งที่มาและทำการวางแบบพิเศษ (คลิกขวา) ด้วย 'values ​​only' รักษาค่าไม่มีการจัดรูปแบบวันที่
Kai Noack

84
ผมแค่อยากจะเพิ่มที่ฉันพิจารณาพฤติกรรมของ Excel นี้จะเป็นข้อบกพร่องร้ายแรง แล้วคนที่ไม่มีความหรูหราในการเปลี่ยนเนื้อหาของไฟล์ csv ก่อนที่จะนำเข้าสู่ Excel ล่ะ? หรือคนที่ไม่ได้ตระหนักถึงปัญหานี้จนกว่าจะทำการเปลี่ยนแปลงอื่น ๆ อีกมากมายในไฟล์ CSV? มันทำให้การทำงานกับไฟล์ CSV ใน Excel เป็นระเบียบ
robguinness

คุณใช้ DatatableJS หรือไม่ เพราะฉันรู้แล้วว่าต้องทำอย่างไรกับ API นั้น หากคุณต้องการสิ่งนี้คุณสามารถพบได้ที่นี่: stackoverflow.com/a/36142043/4241058
Richard Rebeco

11
วิธีแก้ปัญหาทั้งหมดนี้ในการใช้ไฟล์ -> เปิด -> นำเข้าใช้ได้สำหรับเราเพราะเรารู้ว่าเรากำลังทำอะไร แต่มันไร้ประโยชน์สำหรับคนอื่น ๆ 99.5% ของโลกที่ไม่เข้าใจการนำทางระบบไฟล์จาก / ภายใน / ใบสมัคร พวกเขาเห็นไฟล์เพื่อใช้มันพวกเขาดับเบิลคลิกที่มัน ฉันใช้เวลา 25 ปีในการสอนผู้คนถึงวิธีการใช้แอปพลิเคชัน Office และการเขียนโค้ดที่สร้างข้อมูลสำหรับแอปพลิเคชัน office ดังกล่าวและการใช้ / application / เพื่อค้นหาไฟล์ที่ใช้
user2624417

คำตอบ:


355

ฉันพบว่าการใส่ '=' ก่อนเครื่องหมายอัญประกาศคู่จะบรรลุสิ่งที่คุณต้องการ มันบังคับให้ข้อมูลเป็นข้อความ

เช่น. = "2008-10-03", = "ข้อความเพิ่มเติม"

แก้ไข (ตามการโพสต์อื่น ๆ ) : เพราะข้อผิดพลาด Excel 2007 ที่บันทึกไว้โดย Jeffiekinsหนึ่งควรใช้วิธีการแก้ปัญหาที่เสนอโดย Andrew :"=""2008-10-03"""


12
ฉันยอมรับคำตอบนี้เพราะ 1) ไฟล์ csv ของฉันจะถูกใช้โดย Excel เท่านั้นและ 2) นี่สำหรับการบัญชีและไม่สามารถมี 'ตอนเริ่มต้นและ 3) ฉันไม่ต้องการให้พวกเขาต้องทำ การนำเข้า ฉันแค่อยากให้พวกเขาเปิด csv

5
ที่ดี! แต่เนื่องจากการ2,007 ข้อผิดพลาด Excelใช้วิธีการแก้ปัญหาที่เสนอโดยแอนดรู"=""2008-10-03""" : อัปเดตโพสต์แล้ว
TMS

1
สิ่งนี้ใช้ไม่ได้กับฉันใน Excel 2010 หากข้อความยาวเกินไป :(
สตีฟ

7
เหตุผลที่ใช้งานได้เนื่องจากเมื่อ Excel เห็นอักขระ "=" จะตัดสินใจประเมินนิพจน์ที่ตามมา ในกรณีนี้นิพจน์เป็นเพียงตัวอักษรสตริงและค่าของสตริงตัวอักษรเป็นเนื้อหาของสตริง ดังนั้นเครื่องหมายคำพูดจะหายไปอย่างน่าอัศจรรย์ คุณสามารถใส่ = 1 + 2 + 3 และรับค่า 6 หลังจากนำเข้า CSV สูตรจะไม่ถูกทำลายในกระบวนการนำเข้า
lokori

4
มีปัญหาใหญ่กับวิธีนี้ - ถ้าคุณเปิดไฟล์ใน excel และแก้ไขจากนั้นบันทึกและเปิดอีกครั้ง "หายไปทั้งหมด
ACV

150

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ปัญหาจะไม่หายไปในไม่ช้า ไฟล์ CSV นั้นง่ายต่อการสร้างจากภาษาการเขียนโปรแกรมส่วนใหญ่ค่อนข้างเล็กสามารถอ่านได้ใน crunch ด้วยตัวแก้ไขข้อความธรรมดาและแพร่หลาย

ปัญหาไม่เพียง แต่มีวันที่ในฟิลด์ข้อความเท่านั้น แต่ตัวเลขใด ๆ ก็ได้รับการแปลงจากข้อความเป็นตัวเลข ตัวอย่างที่เป็นปัญหา:

  • รหัสไปรษณีย์
  • หมายเลขโทรศัพท์
  • หมายเลขประจำตัวประชาชน

ซึ่งบางครั้งสามารถเริ่มต้นด้วยเลขศูนย์อย่างน้อยหนึ่งรายการ (0) ซึ่งถูกโยนทิ้งเมื่อแปลงเป็นตัวเลข หรือค่ามีอักขระที่สามารถสับสนกับตัวดำเนินการทางคณิตศาสตร์ (ตามวันที่: /, -)

ทั้งสองกรณีที่ผมคิดว่าเป็นวิธีการแก้ปัญหา "prepending =" เป็นที่กล่าวถึงก่อนหน้านี้อาจจะไม่เหมาะคือ

  • ที่ไฟล์นั้นอาจจะนำเข้ามาในโปรแกรมอื่น ๆ กว่า MS Excel (ที่ฟังก์ชั่นจดหมายเวียน MS Word มาถึงใจ)
  • ที่มนุษย์สามารถอ่านได้อาจมีความสำคัญ

แฮ็คของฉันเพื่อแก้ไขสิ่งนี้

หากหนึ่งก่อน / ต่อท้ายอักขระที่ไม่ใช่ตัวเลขและ / หรือไม่ใช่วันที่ในค่าค่าจะได้รับการยอมรับเป็นข้อความและไม่แปลง เป็นตัวละครที่ไม่ใช่การพิมพ์จะดีเท่าที่มันจะไม่เปลี่ยนแปลงค่าที่แสดง อย่างไรก็ตามอักขระช่องว่างธรรมดา (\ s, ASCII 32) ไม่สามารถใช้งานได้เนื่องจาก Excel ถูกตัดออกแล้วค่ายังคงได้รับการแปลง แต่มีอักขระการพิมพ์และไม่ใช่พื้นที่การพิมพ์อื่น ๆ อีกมากมายที่จะทำงานได้ดี ที่ง่ายที่สุดแต่คือการผนวก (เพิ่มหลังจาก) อักขระแท็บอย่างง่าย (\ t, ASCII 9)

ประโยชน์ของวิธีนี้:

  • ได้จากแป้นพิมพ์หรือด้วยง่ายต่อการจำรหัส ASCII (9)
  • ไม่รบกวนการนำเข้า
  • ปกติไม่รำคาญผลจดหมายเวียน (ขึ้นอยู่กับรูปแบบแม่แบบ - แต่ปกติก็แค่เพิ่มพื้นที่กว้างในตอนท้ายของบรรทัด) (ในกรณีนี้คือ แต่ปัญหาดูที่ตัวละครอื่น ๆ เช่นช่องว่างความกว้างศูนย์ (ZWSP, Unicode U + 200B)
  • ไม่ได้เป็นอุปสรรคใหญ่เมื่อดู CSV ใน Notepad ( ฯลฯ )
  • และสามารถลบออกโดย find / replace ใน Excel (หรือ Notepad เป็นต้น)
  • คุณไม่จำเป็นต้องนำเข้า CSV แต่สามารถดับเบิลคลิกเพื่อเปิด CSV ใน Excel

หากมีเหตุผลที่คุณไม่ต้องการใช้แท็บให้ดูในตาราง Unicode เพื่อหาสิ่งอื่นที่เหมาะสม

ตัวเลือกอื่น

อาจเป็นการสร้างไฟล์ XML ซึ่งรูปแบบบางรูปแบบนั้นเป็นที่ยอมรับสำหรับการนำเข้าโดยเวอร์ชัน MS Excel ที่ใหม่กว่าและมีตัวเลือกเพิ่มเติมมากมายที่คล้ายกับรูปแบบ. XLS แต่ฉันไม่เคยมีประสบการณ์กับสิ่งนี้

ดังนั้นจึงมีตัวเลือกต่าง ๆ ขึ้นอยู่กับข้อกำหนด / แอปพลิเคชันของคุณอาจจะดีกว่าอีกแอพหนึ่ง


ส่วนที่เพิ่มเข้าไป

จะต้องมีการกล่าวว่า MS Excel รุ่นที่ใหม่กว่า (2013+) จะไม่เปิด CSV ในรูปแบบสเปรดชีตอีกต่อไปอีกหนึ่งสปีดบัมในเวิร์กโฟลว์ที่ทำให้ Excel มีประโยชน์น้อยลง ... อย่างน้อยก็มีคำแนะนำสำหรับการใช้งาน ดูเช่น Stackoverflow นี้: วิธีการแสดงไฟล์. csv ภายใน Excel 2013 อย่างถูกต้อง .


6
ฉันได้เลขศูนย์นำที่ถูกต้องหลังจากเพิ่ม\tตัวละครแยกของฉัน;... เจ้า MS Office เจ้านี่ทำไมต้องใช้เวลามากกว่า 2 นาทีในการคิดออก?
มอร์เทนเซ่น

2
การเพิ่ม \ t ที่ส่วนท้ายของค่าทั้งหมดจะเป็นการหลอกลวง มันเป็นวิธีแก้ปัญหาแฮ็ค แต่ในทางปฏิบัติมันใช้ได้ดี ฉันชอบสิ่งนี้กับเคล็ดลับสูตรโดยใช้ '=' เท่ากันเพราะในอดีตอาจใช้งานเครื่องมืออื่นได้ยาก
ocroquette

3
มี upvotes ไม่เพียงพอที่สามารถแสดงความขอบคุณสำหรับคุณ ค้นหาและแทนที่ด้วย notepad ++ ',' ถึง '\ t, \ t' (เพื่อรองรับคอลัมน์แรกและคอลัมน์สุดท้ายเช่นกัน) ใช้งานได้อย่างมีเสน่ห์ ขอบคุณ
Asaf

1
ในแบบสอบถาม MySQL ของฉัน (สำหรับเอาต์พุต CSV ผ่าน PHP) ฉันใช้ CONCAT ('\ t', column_name) เคล็ดลับก็เช่นกัน ขอบคุณ!
เพียงธรรมดา High

1
ความคิดที่ดี. อนิจจาตัวเลขนั้นค่อนข้าง "ฉลาด" กว่า Excel และไม่ตกหล่นจากแท็บ ทางเลือกที่ดีที่สุดที่ฉันสามารถเป็นผู้นำ'ได้เพราะเป็นที่เข้าใจกันดีและไม่เสียสมาธิ ... แต่สิ่งที่มองไม่เห็นจะดีกว่า
Heath Raftery

101

การทำงานของการแก้ปัญหาปิดจรดและปัญหานำขึ้นโดย Jeffiekins คุณสามารถปรับเปลี่ยน

"May 16, 2011"

ถึง

"=""May 16, 2011"""

6
ไม่ทำงานใน Excel 2010 หากข้อความยาวเกินความยาวที่แน่นอน
สตีฟ

1
@Andrew การ "แก้ไข" นี้จะทำให้เกิดปัญหาหากคุณต้องการมี"ค่าในระหว่างวันที่
Pacerier

8
FYI ถ้าคุณบันทึกไฟล์ Excel เครื่องหมาย = จะหายไปและคุณจะกลับไปที่สี่เหลี่ยมหนึ่งในครั้งต่อไปที่คุณเปิด
d512

ประสบการณ์ของฉันไม่ตรงกับ steve หรือ d512 มันใช้งานได้สำหรับฉันใน. csv ที่เข้ามาใน Excel 2013 และหลังจากบันทึกเป็น. xlsx จะไม่เปลี่ยนกลับ ง่ายพอที่จะให้ทุกคนทดสอบโดยใช้ข้อมูลแถวนี้: "806676", "ไม่มี", "41", "=" "16 พฤษภาคม 2554" "," 100.00 "," เท็จ "
tbc0

1
@ tbc0 ลอง"806676","None","41","=""05-16-2011""","100.00","False"แทนและคุณจะเห็นการบันทึกและโหลดซ้ำข้อความที่ใส่ยัติภังค์
NetMage

65

ฉันมีปัญหาที่คล้ายกันและนี่เป็นวิธีแก้ปัญหาที่ช่วยฉันโดยไม่ต้องแก้ไขเนื้อหาไฟล์ csv:

หากคุณมีความยืดหยุ่นในการตั้งชื่อไฟล์เป็นอย่างอื่นนอกเหนือจาก ".csv" คุณสามารถตั้งชื่อด้วยนามสกุล ".txt" เช่น "Myfile.txt" หรือ "Myfile.csv.txt" จากนั้นเมื่อคุณเปิดใน Excel (ไม่ใช่โดยการลากและวาง แต่ใช้ไฟล์ -> เปิดหรือรายการไฟล์ที่ใช้ล่าสุด) Excel จะให้ "ตัวช่วยสร้างการนำเข้าข้อความ" ให้คุณ

ในหน้าแรกของตัวช่วยสร้างเลือก "คั่น" สำหรับประเภทไฟล์

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

ในหน้าสามเลือกทุกคอลัมน์ทีละรายการและกำหนดประเภท "ข้อความ" แทน "ทั่วไป" เพื่อหยุด Excel ไม่ให้ยุ่งกับข้อมูลของคุณ

หวังว่านี่จะช่วยคุณหรือบางคนที่มีปัญหาคล้ายกัน!


2
โอ้ฉันไม่ใช่คนแรกที่ค้นพบสิ่งนี้ risingline.com/use-excel-read-csv-without-reformatting.php หน้าเว็บนั้นยังมีคำแนะนำที่เป็นประโยชน์ซึ่งคุณสามารถเลื่อนคลิกคอลัมน์ในหน้าสามของตัวช่วยสร้างเพื่อเลือกทั้งหมดก่อนที่จะกำหนดแต่ละประเภท "ข้อความ"
rainerbit

สิ่งนี้อาจใช้งานได้สำหรับค่าวันที่ แต่ดูเหมือนจะไม่เหมาะกับสิ่งที่ตีความได้ดีกว่าตัวเลข หากสตริงของคุณเป็นตัวเลขและเครื่องหมายจุลภาคทั้งหมดรูปแบบ "ข้อความ" จะเป็นรูปแบบตัวเลขทางวิทยาศาสตร์
ไมเคิล - ที่ไหน Clay Shirky

3
สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันและไม่เกี่ยวข้องกับการเปลี่ยนแปลงใด ๆ ในไฟล์ของฉันยกเว้นเปลี่ยนชื่อเป็น. txt ขอบคุณ.
เควิน

1
น่าเสียดายที่ Excel อนุญาตให้คุณทำเช่นนี้กับคอลัมน์ 6 คอลัมน์แรกเท่านั้น หากคุณต้องการมากกว่านี้วิธีที่ดีกว่าคือการคัดลอกเนื้อหาของ csv สร้างและล้างไฟล์ excel เลือกคอลัมน์ / แถวทั้งหมดแล้วตั้งค่าประเภทเป็น Text จากนั้นวางเนื้อหาและใช้ข้อมูล | ข้อความถึงคอลัมน์
nachocab

นี่เป็นทางออกที่ดีที่สุดและควรทำเครื่องหมายเป็นคำตอบ
Rob

28

คำเตือน: Excel '07 (อย่างน้อย) มีข้อผิดพลาด (nother): หากมีเครื่องหมายจุลภาคในเนื้อหาของเขตข้อมูลมันจะไม่แยก = "ฟิลด์เนื้อหา" อย่างถูกต้อง แต่แทนที่จะใส่ทุกอย่างหลังจากเครื่องหมายจุลภาคใน ฟิลด์ต่อไปนี้โดยไม่คำนึงถึงเครื่องหมายคำพูด

วิธีแก้ปัญหาเดียวที่ฉันพบว่าใช้งานได้คือกำจัด = เมื่อเนื้อหาของฟิลด์มีเครื่องหมายจุลภาค

นี่อาจหมายความว่ามีบางฟิลด์ที่ไม่สามารถแสดงถึง "ถูกต้อง" ใน Excel ได้ แต่ตอนนี้ฉันเชื่อว่าไม่มีใครแปลกใจเกินไป


ฉันเพิ่งทดสอบสิ่งนี้ใน excel 2007 และทำงานได้อย่างถูกต้องสำหรับฉัน อย่างไรก็ตามหากมีช่องว่างนำหน้าเครื่องหมายคำพูดแสดงว่าเครื่องหมายจุลภาคไม่ถูกต้อง
Sunny88

8
สิ่งนี้จะไม่ปรากฏว่าเป็นข้อผิดพลาดตาม RFC 4180 วิธีที่ถูกต้องในการอ้างอิงฟิลด์คือการอ้างอิงทั้งฟิลด์ ดังนั้น "=" "ฟิลด์เนื้อหา" "" tools.ietf.org/html/rfc4180
Peter Stephens

2
@PeterStephens สิ่งนี้ไม่ทำงานหากfield, contentมี"อยู่ภายใน เช่น"=""field, co""ntent"""
Pacerier

1
@Pacerier """"น่าจะเป็นคำพูดที่ฝังตัวจะต้องมีการยกคู่กลายเป็น
ErikE

ฉันสามารถยืนยันได้ว่าคำแนะนำของ @ ErikE นั้นถูกต้อง สำหรับเขตข้อมูลที่มีค่า1"2, ถ้าคุณเลือกที่จะใช้เคล็ดลับนี้ (เมื่อเทียบกับเพียงแค่ปล่อยให้มันเป็นไปตามที่"1""2"อยู่ในแฟ้ม - Excel จะอยู่แล้วได้รับการรักษาเป็นข้อความ) แล้วสตริงที่ถูกต้องสุดท้ายใน Excel การกำหนดเป้าหมายไฟล์ CSV ปลายขึ้น ความเป็น"=""1""""2"""อยู่
เทาร

22

ในขณะที่สร้างสตริงที่จะเขียนลงในไฟล์ CSV ของฉันใน C # ฉันต้องจัดรูปแบบด้วยวิธีนี้:

"=\"" + myVariable + "\""

2
สิ่งนี้ทำให้ฉันใน Rails ด้วย ขอบคุณ
Vieenay Siingh

3
ใช้งานได้กับ Java เช่นกัน
Shoyo

ทำงานให้ฉันด้วย JavaScript โดยใช้ Papa Parse
wobsoriano

17

2018

ทางออกเดียวที่เหมาะสมที่ทำงานให้ฉัน (และโดยไม่ต้องปรับเปลี่ยนรูปแบบ CSV )

Excel 2010:

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

Excel office365: (รุ่นไคลเอนต์)

  1. สร้างสมุดงานใหม่
  2. ข้อมูล> จากข้อความ / CSV> เลือกไฟล์ CSV ของคุณ
  3. การตรวจจับชนิดข้อมูล> ไม่ตรวจจับ

หมายเหตุ: Excel office365 (เวอร์ชันเว็บ) ในขณะที่ฉันกำลังเขียนอยู่คุณจะไม่สามารถทำได้


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

ดูเหมือนว่าคำตอบที่ถูกต้อง ฉันมีความหวังสูง แต่ใน MacOS (office365) ฉันไม่สามารถเลือกคอลัมน์ทั้งหมด : ไม่มีการเลื่อนแนวนอนในหน้าต่างแสดงตัวอย่างที่แสดงในตัวช่วยสร้างการนำเข้าข้อความซึ่งฉันสามารถเลือกคอลัมน์ที่มองเห็นได้เท่านั้น ฉันลองใช้ทางลัด (CMD + A หรือสิ่งอื่น ๆ ) โดยไม่มีประโยชน์ ตัวเลือก "ไม่พบ" ไม่มีอยู่เช่นกัน ฉันเสียใจมาก
normanius

Excel office 365 เลือกไฟล์ตัวเลือกข้อมูล มีช่องทำเครื่องหมายเพื่อแสดงตัวช่วยสร้างการนำเข้าข้อมูลดั้งเดิมหากจำเป็น
Kurt Schultz

15

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

คอลัมน์ทั้งหมดจะถูกนำเข้าเป็นข้อความเช่นเดียวกับที่อยู่ในไฟล์ CSV


1
ฉันพบปัญหาเดียวกัน แต่การทำตามคำแนะนำของ @ Rob อย่างรอบคอบจะสมบูรณ์แบบ! ขอบคุณ
Milacay

2
ผู้ช่วย Data From Text ไม่สนับสนุนเครือข่ายหลายบรรทัด หากพบข้อความหลายบรรทัดเช่นนั้นข้อความจะเขียนทุกบรรทัดหลังจากบรรทัดแรกลงในแถวใหม่โดยทำให้การนำเข้าทั้งหมดหมดลง มันตีความเฉพาะตัวแบ่งบรรทัดอย่างถูกต้องหากคุณเปิดไฟล์ CSV โดยการดับเบิลคลิก คุณประณาม Microsoft ...
CodeManX

1
น่าเสียดายที่นี่ไม่สามารถแก้ปัญหาการจัดรูปแบบแบบสุ่มของ "ช่วย" ของ Excel - ข้อความ DEC1 ยังคงเปลี่ยนเป็นวันที่ Dec-01 เหมือนกับข้อความ YYYY-MM-DD ที่ถูกสลับเป็น DD / MM / YYYY :(
Baracus

12

ยังคงมีปัญหาในการเปิดตัว Microsoft Office 2016 ค่อนข้างรบกวนสำหรับพวกเราที่ทำงานกับชื่อยีนเช่น MARC1, MARCH1, SEPT1 ฯลฯ วิธีการแก้ปัญหาที่ฉันพบว่าเป็นประโยชน์มากที่สุดหลังจากสร้างไฟล์ ".csv" ใน R ที่จะเปิด / แชร์กับผู้ใช้ Excel:

  1. เปิดไฟล์ CSV เป็นข้อความ (แผ่นจดบันทึก)
  2. คัดลอก (ctrl + a, ctrl + c)
  3. วางลงในแผ่นงาน excel ใหม่ - ทั้งหมดจะวางในหนึ่งคอลัมน์เป็นสตริงข้อความที่มีความยาว
  4. เลือก / เลือกคอลัมน์นี้
  5. ไปที่ข้อมูล - "ข้อความถึงคอลัมน์ ... " บนหน้าต่างที่เปิดอยู่ให้เลือก "คั่น" (ถัดไป) ตรวจสอบว่ามีการทำเครื่องหมาย "เครื่องหมายจุลภาค" (การทำเครื่องหมายจะแสดงการแยกข้อมูลไปยังคอลัมน์ด้านล่าง) (ถัดไป) ในหน้าต่างนี้คุณสามารถเลือกคอลัมน์ที่คุณต้องการและทำเครื่องหมายเป็นข้อความ (แทนทั่วไป) (เสร็จสิ้น)

HTH


ความพยายามแบบแมนนวลก็ไม่ทำให้ฉันสนใจ อย่างไรก็ตามหลังจากหมดความเป็นไปได้ทุกอย่างในมือแล้วอันนี้ก็แข็งแกร่งและน่าเชื่อถือที่สุด
Ana Maria Mendes-Pereira

การประมวลผลแบบแบทช์
Ana Maria Mendes-Pereira

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

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

10

นี่เป็นวิธีง่าย ๆ ที่เราใช้ที่ทำงานที่นี่เมื่อสร้างไฟล์ csv ในตอนแรกมันเปลี่ยนค่าเล็กน้อยดังนั้นมันจึงไม่เหมาะในทุกการใช้งาน:

เตรียมช่องว่างให้กับค่าทั้งหมดใน csv

ช่องว่างนี้จะถูกตัดออกโดย excel จากตัวเลขเช่น "1", "2.3" และ "-2.9e4" แต่จะยังคงอยู่ในวันที่เช่น "01/10/1993" และ booleans เช่น "TRUE" หยุดการแปลงเป็น ประเภทข้อมูลภายในของ excel

นอกจากนี้ยังหยุดเครื่องหมายคำพูดคู่ที่ถูก zapped บน read in ดังนั้นวิธีที่ทำให้เข้าใจผิดได้ในการทำข้อความใน csv ยังคงไม่เปลี่ยนแปลงโดย excel แม้เมื่อ IF เป็นข้อความบางอย่างเช่น "3.1415" คือการล้อมรอบด้วยเครื่องหมายคำพูดคู่และเติมสตริงทั้งหมดด้วยช่องว่าง เช่น (ใช้เครื่องหมายคำพูดเดี่ยวเพื่อแสดงสิ่งที่คุณจะพิมพ์) '"3.1415" จากนั้นใน excel คุณจะมีสตริงดั้งเดิมเสมอยกเว้นมันจะล้อมรอบด้วยเครื่องหมายคำพูดคู่และเติมด้วยช่องว่างดังนั้นคุณต้องคำนึงถึงสตริงเหล่านั้นในสูตรใด ๆ เป็นต้น


สิ่งนี้ใช้ได้สำหรับฉัน ฉันมีค่าบางอย่างเช่น 1-1-1 ที่เปลี่ยนเป็นวันที่แบบอัตโนมัติ ตามที่กล่าวไว้พื้นที่จะถูกถ่ายโอนดังนั้นค่าจะถูกเปลี่ยน แต่ฉันทำแถบบนเมื่อแยกวิเคราะห์ดังนั้นสำหรับฉันที่ไม่ใช่เรื่องใหญ่
jacklin

Space ไม่ทำงานอีกต่อไปเพื่อป้องกันการตีความวันที่หรือการแยกศูนย์นำ แต่คุณสามารถใช้พื้นที่ไม่แบ่ง"\xA0"แทน - ซึ่งจะใช้งานได้
Doin

8

(สมมติว่า Excel 2003 ... )

เมื่อใช้ตัวช่วยสร้าง Text-to-Columns ในขั้นตอนที่ 3 คุณสามารถกำหนดชนิดข้อมูลสำหรับแต่ละคอลัมน์ได้ คลิกที่คอลัมน์ในตัวอย่างและเปลี่ยนคอลัมน์ที่ทำงานผิดปกติจาก "ทั่วไป" เป็น "ข้อความ"


8
นี่เป็นตัวเลือกที่ยอดเยี่ยมถ้าฉันสามารถบังคับให้ผู้ใช้ใช้กระบวนการนำเข้า

สิ่งนี้ไม่ได้ช่วยแก้ปัญหาเนื่องจากตัวเลขในคอลัมน์ TEXT จะถูกแปลงเป็นตัวเลขเมื่อส่งออกไปยัง. csv ต่อไป ...
Chonez

8

นี่เป็นวิธีเดียวที่ฉันรู้วิธีการทำสิ่งนี้ให้สำเร็จโดยไม่ต้องยุ่งอยู่กับไฟล์ ตามปกติด้วย Excel ฉันเรียนรู้สิ่งนี้ด้วยการตีหัวของฉันบนโต๊ะเป็นเวลาหลายชั่วโมง

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


สิ่งนี้ใช้ได้ผลดีกับฉันเมื่อวันที่ 2015-03-03 ทำงานกับ Excel for Mac 2011 (รุ่น 14.4.8 150116) ทำงานกับข้อมูลในคำถาม SO awk- หลีกเลี่ยงการจัดรูปแบบค่าเหมือนวันที่ใหม่ซึ่งเป็นปัญหากับ Excel แทน กว่าawkแม้จะมีชื่อคำถาม
Jonathan Leffler

4

(EXCEL 2007 ขึ้นไป)

วิธีการบังคับ excel ไม่ให้ "ตรวจจับ" รูปแบบวันที่โดยไม่ต้องแก้ไขไฟล์ต้นฉบับ

ทั้ง:

  • เปลี่ยนชื่อไฟล์เป็น. txt
  • หากคุณไม่สามารถทำได้แทนที่จะเปิดไฟล์ CSV ใน excel โดยตรงให้สร้างเวิร์กบุ๊กใหม่จากนั้นไปที่
    Data > Get external data > From Text
    และเลือก CSV ของคุณ

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


4

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

012345,00198475

สิ่งเหล่านี้ควรมีการเปลี่ยนแปลงก่อนที่จะเปิดใน Excel เป็น:

"="""012345","="""00198475"

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

="012345"

อีกวิธีหนึ่งคือการเก็บหมายเลขใน csv เป็น1234500198475E-8; วิธีนี้การคำนวณเพิ่มเติมใน excel จะยังคงเป็นไปได้
bert bruynooghe

4

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


หากพื้นที่ว่างทางด้านซ้ายของข้อมูลของคุณไม่สำคัญคุณสามารถแก้ไขปัญหาของ Excel ได้โดยการเตรียม"\xA0"(ไม่เว้นวรรค) ให้กับข้อมูลของคุณ
Doin

3

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

ตัวอย่างที่ 1: = ("012345678905") แสดงเป็น012345678905

ตัวอย่างที่ 2: = ( "1954/12/12") แสดงเป็น1954/12/12ไม่1954/12/12


2

ไม่ใช่ Excel Windows รู้จักสูตรข้อมูลเป็นวันที่และแก้ไขอัตโนมัติ คุณต้องเปลี่ยนการตั้งค่า Windows

"แผงควบคุม" (-> "เปลี่ยนเป็นมุมมองคลาสสิก") -> "ตัวเลือกภูมิภาคและภาษา" -> แท็บ "ตัวเลือกภูมิภาค" -> "ปรับแต่ง ... " -> แท็บ "หมายเลข" -> แล้วเปลี่ยนสัญลักษณ์ ตามสิ่งที่คุณต้องการ

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

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


2

สวัสดีฉันมีปัญหาเดียวกัน

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

ดังนั้นคุณสร้างไฟล์. vbs ด้วยรหัสด้านล่าง (ตัวอย่างเช่น Modify_CSV.vbs) บันทึกและปิดมัน ลากและวางไฟล์ต้นฉบับของคุณไปยังไฟล์ vbscript ของคุณ มันจะสร้างไฟล์ใหม่ด้วย "SPACE_ADDED" เป็นชื่อไฟล์ในตำแหน่งเดียวกัน

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

2

โดยไม่ต้องแก้ไขไฟล์ csv ของคุณคุณสามารถ:

  1. เปลี่ยนตัวเลือก excel Format Cells เป็น "text"
  2. จากนั้นใช้ "Text Import Wizard" เพื่อกำหนดเซลล์ csv
  3. เมื่อนำเข้าลบข้อมูลนั้นแล้ว
  4. จากนั้นเพียงวางเป็นข้อความธรรมดา

excel จะจัดรูปแบบและแยกเซลล์ csv ของคุณอย่างเหมาะสมในรูปแบบข้อความโดยไม่สนใจรูปแบบวันที่อัตโนมัติ

ชนิดของการทำงานที่โง่ ๆ แต่มันก็เต้นแก้ไขข้อมูล csv ก่อนที่จะนำเข้า Andy Baird และ Richard เรียงลำดับของวิธีนี้ แต่พลาดขั้นตอนสำคัญสองสามอย่าง


1

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

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

น่าเสียดายที่ฉันเพิ่งค้นพบว่าวิธีการนี้จะแบ่ง csv แยกเมื่อเซลล์มี linebreaks นี่คือการสนับสนุนจาก csv แต่การใช้งานไมโครซอฟท์ดูเหมือนว่าจะเป็นบั๊ก อีกทั้งมันก็ไม่ได้ตรวจจับตัวอักษรเฉพาะของเยอรมัน การให้วัฒนธรรมที่ถูกต้องไม่เปลี่ยนพฤติกรรมนี้ ไฟล์ทั้งหมด (csv และสคริปต์) จะถูกบันทึกด้วยการเข้ารหัส utf8 แรกฉันเขียนรหัสต่อไปนี้เพื่อแทรกเซลล์ csv โดยเซลล์

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

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

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

คุณสามารถใช้รหัสข้างต้นตามที่ควรแปลง csvs ใด ๆ ให้เป็น excel เพียงแค่เปลี่ยนเส้นทางเป็น csv และตัวคั่นที่ด้านล่าง


ซับซ้อนเกินไป
หมุน

1

ในกรณีของฉัน "Sept8" ในไฟล์ csv ที่สร้างขึ้นโดยใช้ R ถูกแปลงเป็น "8 กันยายน" โดย Excel 2013 ปัญหาได้รับการแก้ไขโดยใช้ write.xlsx2 () ฟังก์ชันในแพ็คเกจ xlsx เพื่อสร้างไฟล์เอาต์พุตในรูปแบบ xlsx ซึ่ง Excel สามารถโหลดได้โดยไม่มีการแปลงที่ไม่ต้องการ ดังนั้นหากคุณได้รับไฟล์ csv คุณสามารถลองโหลดลงใน R และแปลงเป็น xlsx โดยใช้ฟังก์ชัน write.xlsx2 ()


ฉันไม่รู้ว่าทำไมคำตอบของคุณถูกลดระดับลง เป็นประโยชน์กับคนอย่างน้อยที่ใช้ R คำตอบนี้ช่วยฉันได้ ขอบคุณ :)
sriharsha KB

1

วิธีแก้ปัญหาโดยใช้ Google Drive (หรือตัวเลขหากคุณใช้ Mac):

  1. เปิดข้อมูลใน Excel
  2. ตั้งค่ารูปแบบของคอลัมน์ด้วยข้อมูลที่ไม่ถูกต้องเป็นข้อความ (รูปแบบ> เซลล์> หมายเลข> ข้อความ)
  3. โหลด. csv ลงใน Google Drive และเปิดด้วย Google ชีต
  4. คัดลอกคอลัมน์ที่ละเมิด
  5. วางคอลัมน์ลงใน Excel เป็นข้อความ (แก้ไข> วางแบบพิเศษ> ข้อความ)

หรือถ้าคุณใช้ Mac สำหรับขั้นตอนที่ 3 คุณสามารถเปิดข้อมูลใน Numbers ได้


นี่เป็นวิธีแก้ปัญหาที่มีสติมากกว่าทำงานเป็นเวลาหลายชั่วโมงโดยไม่มีการแก้ไขใด ๆ
imsrgadich

1

(EXCEL 2016 ขึ้นไปจริง ๆ แล้วฉันไม่ได้ลองในเวอร์ชั่นที่เก่ากว่า)

  1. เปิดหน้าว่างใหม่
  2. ไปที่แท็บ "ข้อมูล"
  3. คลิก "จากข้อความ / CSV" และเลือกไฟล์ csv ของคุณ
  4. ตรวจสอบดูตัวอย่างว่าข้อมูลของคุณถูกต้องหรือไม่
  5. ในсaseเมื่อบางคอลัมน์ถูกแปลงเป็นวันที่ให้คลิก "แก้ไข" แล้วเลือกพิมพ์ข้อความโดยคลิกที่ปฏิทินในส่วนหัวของคอลัมน์
  6. คลิก "ปิดและโหลด"

0

ตกลงพบวิธีง่ายๆในการทำเช่นนี้ใน Excel 2003 ถึง 2007 เปิดสมุดงาน xls เปล่า จากนั้นไปที่เมนูข้อมูลนำเข้าข้อมูลภายนอก เลือกไฟล์ csv ของคุณ ผ่านตัวช่วยสร้างจากนั้นใน "รูปแบบข้อมูลคอลัมน์" เลือกคอลัมน์ใด ๆ ที่จำเป็นต้องบังคับให้ "ข้อความ" สิ่งนี้จะนำเข้าคอลัมน์ทั้งหมดในรูปแบบข้อความที่ป้องกันไม่ให้ Excel พยายามปฏิบัติกับเซลล์ใด ๆ เป็นวันที่


0

ปัญหานี้ยังคงปรากฏใน Mac Office 2011 และ Office 2013 ฉันไม่สามารถป้องกันได้ ดูเหมือนว่าเป็นสิ่งพื้นฐาน

ในกรณีของฉันฉันมีค่าเช่น "1 - 2" & "7 - 12" ภายใน CSV ที่ถูกต้องภายในเครื่องหมายจุลภาคคว่ำสิ่งนี้จะแปลงเป็นวันที่ภายใน excel โดยอัตโนมัติหากคุณลองแปลงเป็นข้อความธรรมดาคุณจะได้รับ การแสดงตัวเลขของวันที่เช่น 43768 นอกจากนี้ยังทำการฟอร์แมตตัวเลขจำนวนมากที่พบในบาร์โค้ดและหมายเลข EAN เป็นตัวเลข 123E + อีกครั้งซึ่งไม่สามารถแปลงกลับได้

ฉันพบว่า Google ชีตของ Google Drive ไม่ได้แปลงตัวเลขเป็นวันที่ บาร์โค้ดมีเครื่องหมายจุลภาคอยู่ทุก 3 ตัวอักษร แต่จะลบออกได้ง่าย มันจัดการกับ CSV ได้ดีโดยเฉพาะอย่างยิ่งเมื่อต้องรับมือกับ MAC / Windows CSV

อาจช่วยบางคนได้


0

ทางออกที่ง่ายที่สุดฉันเพิ่งคิดออกวันนี้

  • เปิดใน Word
  • แทนที่เครื่องหมายขีดคั่นทั้งหมดด้วยเครื่องหมายขีดกลาง
  • บันทึกและปิด
  • เปิดใน Excel

เมื่อคุณแก้ไขเสร็จแล้วคุณสามารถเปิดสำรองใน Word อีกครั้งเพื่อแทนที่เครื่องหมายขีดคั่นด้วยเครื่องหมายขีดคั่นอีกครั้ง


0

ฉันทำเช่นนี้กับหมายเลขบัตรเครดิตที่เปลี่ยนเป็นสัญกรณ์วิทยาศาสตร์: ฉันสิ้นสุดการนำเข้า. csv ของฉันลงใน Google ชีต ขณะนี้ตัวเลือกการนำเข้าอนุญาตให้ปิดใช้งานการจัดรูปแบบค่าตัวเลขโดยอัตโนมัติ ฉันตั้งค่าคอลัมน์ที่ละเอียดอ่อนใด ๆ ให้เป็นข้อความธรรมดาและดาวน์โหลดเป็น xlsx

มันเป็นขั้นตอนการทำงานที่แย่มาก แต่อย่างน้อยค่านิยมของฉันก็ยังเหลือเท่าที่ควร


ถ้าคุณรำคาญที่จะอ่านผ่านบางส่วนของคำตอบอื่น ๆ คุณจะเห็นคนที่แนะนำแล้วนี้ที่นี่
ลอเรล

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

แต่คุณสามารถใช้การนำเข้าข้อความใน Excel เพื่อนำเข้าไฟล์ CSV และไม่ต้องกังวลกับชีตดังที่ระบุไว้ในคำตอบอื่น ๆ
NetMage

0

ฉันทำแมโคร vba นี้ซึ่งจัดรูปแบบช่วงเอาต์พุตเป็นข้อความโดยทั่วไปก่อนวางตัวเลข ทำงานได้สมบูรณ์แบบสำหรับฉันเมื่อฉันต้องการวางค่าเช่น 8/11, 23/6, 1/3 ฯลฯ โดยไม่ต้องใช้ Excel ตีความเป็นวันที่

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

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


-1

หากคุณใส่เครื่องหมายจุลภาคคว่ำที่จุดเริ่มต้นของเขตข้อมูลมันจะถูกตีความว่าเป็นข้อความ

ตัวอย่าง: 25/12/2008กลายเป็น'25/12/2008

คุณยังสามารถเลือกประเภทฟิลด์เมื่อนำเข้า


9
ฉันไม่ต้องการ 'ที่จุดเริ่มต้นของข้อมูลของฉัน

27
-1 'ใช้ได้เฉพาะเมื่อป้อนโดยตรงใน excel แต่ไม่สามารถใช้งานใน CSV ได้ - คุณมีอักขระพิเศษ' ในเซลล์ excel หลังจากนำเข้า
TMS

-1

วิธีอื่น:

แปลงรูปแบบของคอลัมน์ที่คุณต้องการเปลี่ยนเป็น 'ข้อความ' เลือกเซลล์ทั้งหมดที่คุณต้องการเก็บไว้คัดลอก โดยไม่ยกเลิกการเลือกคอลัมน์เหล่านั้นคลิก "แก้ไข> วางแบบพิเศษ> เป็นค่า"

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

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