เล่าเรื่อง Import CSV ผ่าน CsvHelper และ Export Excel โดยใช้ CloseXml
เนื่องจากผู้เขียนได้รับไฟล์ CSV มาจำนวน 8–10 ไฟล์เพื่อใช้สำหรับการปรับแต่งข้อมูลใหม่โดยลูกค้าต้องการให้ทำ cleasing data และ merge data รวมในบางจุด จะมานั่งทำมือเองในทุกๆวัน ก็เสียเวลามากเกินไป เลยทดลองเขียน web app ตัวเล็ก ๆ เพื่อใช้จัดการข้อมูล ดังนี้
โจทย์ คือ
ให้สามารถอัพโหลดไฟล์รูปแบบ CSV ซึ่งในนี้จะมีข้อมูลดิบ คั่นด้วยเครื่องหมายคอมมา จากนั้นจัดการข้อมูลให้เสร็จ และนำข้อมูลออกเป็นไฟล์รูปแบบ Excel
สมมุติฐาน
ให้มีหน้า web application เพื่อที่จะได้ติดตั้งบน server ให้ใช้งานออนไลน์ได้ จากนั้นมีหุ่มสำหรับ upload file และให้ระบบ export file กลับมาอัตโนมัติ
การทดลอง
1. เลือก tech stack สำหรับเขียน web application ผู้เขียนเลือกใช้ .NET 5 เพื่อที่จะได้ติดตั้งบน Azure windows หรือ Linux ได้
2. เลือก Library สำหรับอ่าน CSV ผู้เขียนเลือกใช้ CSVHelper เนื่องจากเป็น open source ใช้งานง่าย ประสิทธิภาพเร็ว ใช้ความจำน้อย มีการทำแคช สามารถรันบน linux ได้ด้วย และมี document อ่านง่าย เวอร์ชั่นล่าสุด คือ 27.10
3. เลือก Library สำหรับเขียน Excel ผู้เขียนเลือกใช้ CloseXML เนื่องจากเป็น open source และผู้เขียนสังเกตว่าชื่อมันคล้าย ๆ OpenXML ที่เคยใช้มาก่อนหน้านี้ ก็เลยขอลองสักหน่อย
เมื่ออ่าน document ให้เข้าใจในระดับนึงแล้วก็ลุยกันเลย
เริ่มจากสร้าง project > web application .NET core 5
Download NuGet
PM> Install-Package ClosedXMLPM> Install-Package CSVHelper
สร้างหน้าจอ Razor และปุ่มสำหรับ upload file
สร้าง Controller สำหรับรับไฟล์เข้าระบบ
สร้าง method สำหรับการอ่าน CSV
และสร้าง Class สำหรับ Convert Record ที่ได้ให้กลายเป็น object พร้อมทั้ง ClassMap สำหรับกำหนดว่าจะใช้ Properties ตัวที่ต้องการ หรือไม่ต้องการในการเชื่อมโยงข้อมูล
สร้าง Logic สำหรับการ Cleaning Data
จริง ๆ มีหลายส่วนแต่แคปมาเป็นตัวอย่างแค่นี้
สร้าง method สำหรับการเขียน Excel
สรุปผลการทดลอง
นับว่าช่วยลดงาน Routine ลงไปได้เยอะพอสมควร ผู้เขียนจะพัฒนาปรับปรุงต่อให้สามารถเลือก template excel ที่ต้องการได้ รวมทั้งจะมีหน้าจอ UI เพื่อเลือกเงื่อนไขและ Logic สำหรับงานนั้นต่อไป และอาจจะเป็น Schedule job เพื่อให้ระบบทำงานต่อเนื่องตามเวลาที่ตั้งไว้