ช่วงนี้เอาบทความสั้นๆ เป็น Tip ในการใช้งาน ASP.NET เพื่ออ่านข้อมูลในเอกสาร Microsoft Excel โดยใช้ OleDB ครับ
//ประกาศตัวแปร connectionstring เพื่อใช้ติดต่อไปยังเอกสาร Microsoft Excel โดยตัวสีแดง เป็น Path ของไฟล์ครับ
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\myfile.xls;Extended Properties=Excel 8.0;";
//จากนั้นสร้าง OleDB Connection เพื่อใช้ติดต่อไปยังเอกสาร Microsoft Excel จาก Connectionstring ที่ได้ประกาศไว้
OleDbConnection objConn = new OleDbConnection(sConnectionString);
//ทำการเปิด Connection
objConn.Open();
//ใช้คำสั่ง SELECT เพื่อ Query ข้อมูลจากเอกสารชื่อ Sheet1 ถ้าตั้งชื่อ Sheet ไว้ก็แก้เป็นชื่อเอกสารนั้นๆตามด้วย $ (Dollar sign)
OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [Sheet1$]", objConn);
//ใช้งาน OleDbAdapter
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
//Assign คำสั่งที่ใช้ในการ Query ลงใน SelectCommand
objAdapter1.SelectCommand = objCmdSelect;
//สร้าง DataSet เพื่อใช้บรรจุข้อมูลที่อ่านออกมาทั้งหมด
DataSet objDataset1 = new DataSet();
//ทำการบันทึกข้อมูลทั้งหมดลงใน DataSet
objAdapter1.Fill(objDataset1);
//ทำการปิดการติดต่อ
objConn.Close();
จากโค๊ดข้างต้นเราก็สามารถนำข้อมูลที่อยู่ใน DataSet ไปใช้งานต่อได้ทันทีครับ
//ประกาศตัวแปร connectionstring เพื่อใช้ติดต่อไปยังเอกสาร Microsoft Excel โดยตัวสีแดง เป็น Path ของไฟล์ครับ
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\myfile.xls;Extended Properties=Excel 8.0;";
//จากนั้นสร้าง OleDB Connection เพื่อใช้ติดต่อไปยังเอกสาร Microsoft Excel จาก Connectionstring ที่ได้ประกาศไว้
OleDbConnection objConn = new OleDbConnection(sConnectionString);
//ทำการเปิด Connection
objConn.Open();
//ใช้คำสั่ง SELECT เพื่อ Query ข้อมูลจากเอกสารชื่อ Sheet1 ถ้าตั้งชื่อ Sheet ไว้ก็แก้เป็นชื่อเอกสารนั้นๆตามด้วย $ (Dollar sign)
OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [Sheet1$]", objConn);
//ใช้งาน OleDbAdapter
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
//Assign คำสั่งที่ใช้ในการ Query ลงใน SelectCommand
objAdapter1.SelectCommand = objCmdSelect;
//สร้าง DataSet เพื่อใช้บรรจุข้อมูลที่อ่านออกมาทั้งหมด
DataSet objDataset1 = new DataSet();
//ทำการบันทึกข้อมูลทั้งหมดลงใน DataSet
objAdapter1.Fill(objDataset1);
//ทำการปิดการติดต่อ
objConn.Close();
จากโค๊ดข้างต้นเราก็สามารถนำข้อมูลที่อยู่ใน DataSet ไปใช้งานต่อได้ทันทีครับ
Blue

Fri 7 Jul 2006 11:24:16
Fri 7 Jul 2006 11:24:16
เยี่ยมมากครับ กำลังศึกษาพอดี ว่าแต่ถ้าผมจะเพิ่ม ลบ แก้ไข Sheet1 จะทำยังไงครับพอมีแนวทางมั้ย
การเพิ่มหรือแก้ไขสามารถใช้งาน ADO.NET ได้เหมือนกันครับ
การ insert ทำเหมือนการใช้งานฐานข้อมูลทั่วไปได้เลยครับ เพียงแต่ค่าต้องคร่อมด้วย " (Double-quote) เท่านั้นครับ
conn.Open();
OleDbCommand cmd = new OleDbCommand("INSER INTO [Sheet1$](field1, field2) VALUES(\"value1\", \"value2\")", conn);
cmd.ExecuteNonQuery();
conn.Close();
การ update ก็เช่นเดียวกันครับ
conn.Open();
OleDbCommand cmd = new OleDbCommand("UPDATE [Sheet1$] SET field1=\"value3\" WHERE ID=1", conn);
cmd.ExecuteNonQuery();
conn.Close();
การ insert ทำเหมือนการใช้งานฐานข้อมูลทั่วไปได้เลยครับ เพียงแต่ค่าต้องคร่อมด้วย " (Double-quote) เท่านั้นครับ
conn.Open();
OleDbCommand cmd = new OleDbCommand("INSER INTO [Sheet1$](field1, field2) VALUES(\"value1\", \"value2\")", conn);
cmd.ExecuteNonQuery();
conn.Close();
การ update ก็เช่นเดียวกันครับ
conn.Open();
OleDbCommand cmd = new OleDbCommand("UPDATE [Sheet1$] SET field1=\"value3\" WHERE ID=1", conn);
cmd.ExecuteNonQuery();
conn.Close();
Blue

Fri 7 Jul 2006 15:00:04
Fri 7 Jul 2006 15:00:04
ผมมีกรณีตัวอย่างแบบนี้ครับ คือต้องการ access ข้อมูลใน Excel ขณะที่ไฟล์ Excel ยังเปิดใช้งานอยู่เนื่องจากว่า Field ที่ต้องการดึงมาใช้งานนั้นมีสูตรคำนวนที่มีการประมวลผลตลอดเวลา แต่จากการทำสอบโดบการเขียน ASP ติดต่อปรากฏว่าไม่สามารถดึงข้อมูลมาได้เนื่องจากว่าไฟล์นี้ถูกใช้งานอยู่ อยากรู้ว่ามีวิธีการเขียนยังไงให้สามารถทำการติดต่อกับ Excel ที่เปิดใช้งานอยู่ได้ครับ จะเป็น ASP PHP หรือ .NET ก็ได้ครับ ช่วยแนะนำหน่อย
ผมยังไม่เห็น Solution ที่แก้ปัญหาของคุณได้เลยครับ

















