วันพฤหัสบดีที่ 28 พฤษภาคม พ.ศ. 2552

การเขียนและอ่านข้อมูลใน Excel โดยใช้ C#

ในตัวอย่างนี้จะสร้างเอกสารไฟล์ Excel แล้วใส่ข้อมูลลงไป หลังจากนั้นจะอ่านข้อมูลในเอกสาร Excel แล้วแสดงข้อความเป็น MessageBox

เตรียมการ
1. เปิด Project ใหม่แล้ววางปุ่มบนฟอร์ม
2. ใส่ Code ต่อไปนี้

private void button1_Click(object sender, EventArgs e)
{
   //ช่วงที่ 1 เตรียมสร้างเอกสาร
   object missing = System.Reflection.Missing.Value;
   Excel.Application exApp = new Excel.ApplicationClass();
   exApp.Visible = true;

   Excel.Workbook exBook = exApp.Workbooks.Add(missing);
   Excel.Worksheet exSheet = (Excel.Worksheet)exBook.Sheets["Sheet1"];
   exSheet.Name = "Example";

   //ช่วงที่ 2 เขียนข้อมูลลงไฟล์ Excel
   exSheet.Cells[1, 1] = "TEST";
   exSheet.Cells[1, 2] = "ABCD";

   //ช่วงที่ 3 อ่านข้อมูลจากเอกสาร Excel สามารถเขียนได้สองแบบ
   MessageBox.Show((string)((Excel.Range)exSheet.Cells[1,2]).Text);
   MessageBox.Show(exSheet.get_Range("A1", "A1").Value2.ToString());

}

3. ทดสอบโปรแกรม

วันพุธที่ 25 มีนาคม พ.ศ. 2552

การแก้ปัญหาเรื่องรูปแบบวันใน .Net

ปัญหาพบบ่อยในการจัดการวันเวลาที่พบคือ
1. ปัญหา พ.ศ. กับ ค.ศ.
2. รูปแบบวันที่ระหว่างฐานข้อมูลกับตัว Windows ไม่ตรงกัน เช่น ใน MySQL รูปแบบ Default คือ yyyy-mm-dd ส่วนใน Windows คือ dd/mm/yyyy (ขึ้นอยู่กับการกำหนดค่าใน windows)

สำหรับการแก้ปัญหาในเรื่องดังกล่าวทำได้โดย

ปัญหา พ.ศ. กับ ค.ศ.
ปัญหานี้แก้โดยกำหนด CultureInfo ให้เป็นรูปแบบที่ต้องการเช่น หากต้องการเปลี่ยนรูปแบบให้เป็น ค.ศ ก็ให้กำหนดค่าเป็น "en-US"
ตัวอย่าง Code

using System.Globalization;
.....

DateTimeFormatInfo myDTFI = new CultureInfo("en-US", false).DateTimeFormat;
Console.WriteLine(DateTime.Now.ToString(myDTFI));

ปัญหารูปแบบวันไม่ตรงตามที่ต้องการ
ปัญหานี้แก้โดยกำหนดรูปแบบวันตามที่ต้องการในขณะแปลงเป็นข้อความ
ตัวอย่าง Code

Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd", myDTFI));

จากตัวอย่างข้างต้น เมื่อใช้รวมกัน จะพิมพ์ข้อความออกมาในรูปแบบดังนี้
เช่น วันที่ 16 มกราคม พ.ศ. 2552 วันนี้พิมพ์ออกมาจะได้

2009-01-16