ตอนจบของสามก๊กสอนว่า ความดีเท่านั้นที่จะยังคงอยู่ตลอดไป
|
|||
การเขียน Excel Macro ให้ Export ข้อมูลออกเป็น CSV ทีละ 1000 แถว พอดีวันนี้เห็นคำถามที่น่าสนใจครับ เลยขอมาเขียนเป็น Blog คำถามก็คือ https://pantip.com/topic/30062420 วันก่อนผมมาถามก็ได้รับคำตอบที่ดีจากน้า ๆ ที่เป็นสมาชิกพอเอาไปใช้เข้าจริง ๆ แล้ว ถ้าตัวหนังสือ มันยาวเกิน 1 บรรทัดใน word ก็นับเป็น 1 บรรทัด ก็กลายเป็นว่าข้อมูลออกมาไม่หมด (ทีแรกก็ทำได้ครับ เพราะว่าข้อมูล ในแต่ละแถวไม่เยอะ แต่ผม โชคดีได้ ข้อมูลที่ยาว ๆ มาก็เลยทำไม่ได้ที่จะให้ export ออกมาทีละบรรทัดไม่ได้เพราะว่าข้อมูลยาวเกิน) ผมก็เห็นว่าวิธีนี้ง่ายและดีที่สุดคือ ให้ export ออกจาก macro ของ MS นี่เป็นรายละเอียดและคำถามเก่านะครับ พอดีกว่าผมมีไฟล์ csv อยู่ 1 ไฟล์ แล้วในนั้นมีข้อมูลอยู่ประมาณ หมื่นกว่าบรรทัด ต้องการแบ่งข้อมูลในนั้น ออกมาทีละ 1000 แถว โดยที่แต่ละ 1000 แถวนั้นจะบันทึกเป็นชื่อไฟล์ ให้มันเรียงลำดับเช่น output01.csv สำหรับ 1000 แถวแรก output02.csv สำหรับ 1000 แถวต่อไป จนถึง output10.csv นี้กระทู้เก่า นะครับ https://pantip.com/topic/30029285 อันนี้เป็นการแก้ปัญหาโดยใช้ macro ใน word โดยคุณศุภชัย copy ไฟล์ csv นั้น สำรองไว้ก่อนครับ เปิด Word สั่ง View แบบ Normal นะครับ จะได้ดูได้สบายตา แล้วเปิดไฟล์ .csv นั้น ใน Word เรียกคำสั่ง Macro สร้าง Macro ใหม่ ด้วยคำสั่งชุดนี้ครับ Sub MyMacro() For n = 1 To 10 Selection.MoveDown Unit:=wdLine, Count:=1000, Extend:=wdExtend Selection.Cut Documents.Add DocumentType:=wdNewBlankDocument Selection.PasteAndFormat (wdPasteDefault) FName = "output" & n & ".csv" ActiveDocument.SaveAs FileName:=FName, FileFormat:=wdFormatText, _ LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _ :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _ SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _ False, Encoding:=874, InsertLineBreaks:=False, AllowSubstitutions:=False, _ LineEnding:=wdCRLF, AddBiDiMarks:=False ActiveDocument.Close Next n End Sub กลับไปที่หน้าจอเอกสาร แล้วสั่ง Run Macro ที่สร้างไว้ข้างต้น ใน Word ก่อนทำ เมื่อเปิดไฟล์แล้ว ให้กด CTRL+A เลือกขนาดอักษรให้เป็น 5 point แล้วก็กำหนด Page Setup เลือกระดาษแนวนอน เลือกขนาดกระดาษให้กว้างสัก 55 cm ครับ เชื่อว่า เพียงพอ ที่จะทำให้ไม่เกิดการขึ้นบรรทัดใหม่ครับ code ด้านล่างคือ Code ที่เป็น Excel VBA ครับ Sub DivideFile() Dim record As String Dim countloop, maxcount As Integer Dim x As String maxcount = 3 countloop = 0 Open "c:testxxx.csv" For Input As #1 Open "c:testxxx" + Str(Int(countloop / maxcount)) + ".csv" For Output As #2 Do Until EOF(1) Line Input #1, record Print #2, record countloop = countloop + 1 If (countloop Mod maxcount = 0) Then Close #2 Open "c:testxxx" + Str(Int(countloop / maxcount)) + ".csv" For Output As #2 End If Loop Close #1 Close #2 End Sub ขออธิบาย code ดังนี้ 1 จำนวน record สูงสุดต่อ file ในกรณีนี้เปลี่ยนจากเลข 3 เป็น 1000 2 folder และ ชื่อ file csv ทีเป็น input 3 output file csv ที่เป็น sequence ไปเรื่อยๆ 4 function Line input เพื่อให้อ่านข้อมูลมาทั้งบรรทัด ** รับเขียนโปรแกรมบน excel หรือ python ติดต่อ line id : pornchai999 บทความเก่า |
thaiger_u
Rss Feed Smember ผู้ติดตามบล็อก : 3 คน [?] @ฟรี โปรแกรมปฏิทิน 2564 - Free android app @ รับสอน เขียนโปรแกรม Python ระดับมัธยมปลาย Group Blog All Blog
|
||
Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved. |