การอ่านไฟล์ Excel ใน C# ด้วยห้องสมุดฟรีและโอเพนซอร์ส

คุณเคยพบว่าตัวเองต้องต่อสู้กับการอ่านไฟล์ Excel โดยตรงในแอปพลิเคชัน C# ของคุณหรือไม่? ถ้าใช่ คุณไม่ได้อยู่คนเดียว! นักพัฒนาหลายคนต้องเผชิญกับความท้าทายในการดึงข้อมูลจากสเปรดชีต Excel โดยไม่พึ่งพากระบวนการด้วยมือ ข่าวดีคือ มีวิธีที่มีประสิทธิภาพและฟรีในการทำเช่นนี้โดยใช้ห้องสมุดโอเพนซอร์ส ในโพสต์บล็อกนี้ เราจะสำรวจวิธีที่คุณสามารถอ่านไฟล์ Excel (.xls) โดยตรงจากโปรแกรม C# โดยไม่ต้องใช้ขั้นตอนด้วยมือที่น่าเบื่อ

ปัญหา: การประมวลผลไฟล์ Excel ด้วยมือ

แบบดั้งเดิม นักพัฒนาหลายคนเลือกวิธีการด้วยมือ โดยการส่งออกชีต Excel เป็นรูปแบบข้อความ Unicode และจากนั้นทำการแยกไฟล์ที่แสดงผลออกมาเป็นแบบ tab-delimited แม้ว่าวิธีนี้จะใช้ได้ แต่ก็ไม่เป็นวิธีที่มีประสิทธิภาพที่สุด คุณอาจพบว่ามันยุ่งยาก โดยเฉพาะถ้าคุณต้องทำซ้ำกระบวนการนี้บ่อยๆ หรือจัดการกับไฟล์จำนวนมาก

โชคดีที่มีวิธีที่ดีกว่าในการอ่านไฟล์ Excel อย่างเป็นโปรแกรม โดดเด่นไปที่โซลูชันกันเถอะ!

โซลูชัน: การใช้ OLE DB ในการอ่านไฟล์ Excel

หนึ่งในวิธีที่ง่ายที่สุดในการอ่านไฟล์ Excel ใน C# คือการใช้ OLE DB (Object Linking and Embedding Database) provider ด้วย OLE DB คุณสามารถเชื่อมต่อกับไฟล์ Excel ราวกับว่าพวกมันคือฐานข้อมูล และทำการเรียกใช้ SQL เพื่อนำข้อมูลที่คุณต้องการ นี่คือวิธีทำตามขั้นตอน:

ขั้นตอนที่ 1: ตั้งค่าการเชื่อมต่อของคุณ

ก่อนที่จะอ่านข้อมูล คุณจะต้องตั้งค่าการเชื่อมต่อกับไฟล์ Excel ของคุณ นี่คือตัวอย่างของการจัดรูปแบบข้อมูลการเชื่อมต่อของคุณ:

var fileName = string.Format("{0}\\fileNameHere", Directory.GetCurrentDirectory());
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
  • fileName: ตัวแปรนี้เก็บเส้นทางไปยังไฟล์ Excel ของคุณ
  • connectionString: นี่คือการเชื่อมต่อไปยังไฟล์ Excel ที่รวมถึงข้อมูลของ provider และ data source

ขั้นตอนที่ 2: ดึงข้อมูล

ตอนนี้คุณได้ตั้งค่าการเชื่อมต่อแล้ว คุณสามารถดึงข้อมูลจากเวิร์กชีตที่ระบุ โดยใช้ OleDbDataAdapter ด้านล่างคือโค้ดในการดึงข้อมูลทั้งหมดจากเวิร์กชีต:

var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();

// เติม DataSet ด้วยข้อมูลที่ดึงมา
adapter.Fill(ds, "anyNameHere");
DataTable data = ds.Tables["anyNameHere"];
  • แทนที่ workSheetNameHere ด้วยชื่อจริงของชีตที่คุณต้องการอ่านข้อมูล

ขั้นตอนที่ 3: ใช้ LINQ ในการจัดการข้อมูล

เมื่อคุณมีข้อมูลใน DataTable คุณสามารถใช้ LINQ (Language Integrated Query) ในการจัดการและค้นหาข้อมูลได้อย่างง่ายดาย หากคุณต้องการกรองแถวใด ๆ ที่มีฟิลด์เฉพาะที่ว่างเปล่า นี่คือวิธีที่คุณสามารถทำได้:

var data = ds.Tables["anyNameHere"].AsEnumerable();

var query = data.Where(x => x.Field<string>("phoneNumber") != string.Empty).Select(x =>
    new MyContact
    {
        firstName = x.Field<string>("First Name"),
        lastName = x.Field<string>("Last Name"),
        phoneNumber = x.Field<string>("Phone Number"),
    });

สรุปจุดสำคัญ

เพื่อต خلاصา การอ่านไฟล์ Excel ใน C# โดยใช้ OLE DB provider เป็นเรื่องที่ตรงไปตรงมาและกำจัดความจำเป็นในการจัดการไฟล์ด้วยมือ นี่คือจุดสำคัญที่ควรจำ:

  • ตั้งค่าข้อมูลการเชื่อมต่อให้ถูกต้อง โดยใช้ OLE DB provider
  • ดึงข้อมูลจาก Excel โดยใช้ OleDbDataAdapter
  • ใช้ LINQ ในการกรองและจัดการข้อมูลที่ดึงมา

โดยการทำตามขั้นตอนเหล่านี้ คุณสามารถสร้างการบูรณาการที่ราบรื่นสำหรับการอ่านไฟล์ Excel โดยตรงในแอปพลิเคชัน C# ของคุณ

สรุป

การอ่านไฟล์ Excel อย่างมีประสิทธิภาพใน C# ไม่จำเป็นต้องทำให้ยุ่งยาก ด้วยวิธีการที่เราได้อธิบาย คุณสามารถทำให้กระบวนการเป็นอัตโนมัติ ประหยัดเวลา และมุ่งเน้นในสิ่งที่สำคัญในงานพัฒนาของคุณ

ตอนนี้คุณมีความรู้เพียงพอในการกำจัดขั้นตอนด้วยมือในการอ่านไฟล์ Excel ก็ไปลองทำดูในโปรเจกต์ของคุณได้เลย!