Group Blog
 
 
ตุลาคม 2548
 1
2345678
9101112131415
16171819202122
23242526272829
3031 
 
21 ตุลาคม 2548
 
All Blogs
 
[ C# ] Copy Data ลงใน Clipboard เพื่อไป Paste ใน Excel

โปรแกรมที่เราเขียน ในบางครั้งมีลักษณะการเก็บข้อมูลแบบตาราง เช่นข้อมูลที่แสดงผลใน DataGrid การที่จะให้ User สามารถ Copy Data ออกไปเพื่อนำไปคำนวนหรือทำอย่างอื่นเพิ่มเติมใน Microsoft Excel นั้นก็สามารถทำได้ วิธีการหนึ่งที่ง่ายก็คือใช้การ Copy - Paste

การ Copy ข้อมูลจากในโปรแกรมลงไป Paste บน Excel จะต้องทำการ นำ Data ที่ต้องการเข้าไปใส่ไว้ใน System Clipboard ซึ่ง Data ที่จะสามารถเอาลงไป Paste บน Excel ได้ จะต้องเป็น Data ที่มี Format เป็น Comma Separated หรือเรียกอีกอย่างว่า Comma Separated Value

Comma Separated Value ก็คือข้อมูลที่จัดเรียงกันเป็นลักษณะตาราง โดยมีเครื่องหมาย Comma เป็นตัวคั่นระหว่าง Column และมีการ ขึ้นบรรทัดใหม่ สำหรับ Row ใหม่ ตัวอย่างเช่น

0,1,2,3
4,5,6,7

ลักษณะข้างบนนี้คือข้อมูล 2 row 4 column เราจะต้องจัดเรียงข้อมูลให้เป็น string ที่อยู่ในลักษณะนี้ก่อน ก่อนที่จะนำไปใส่ลงใน Clipboard โดยเราวสามารถใช้ class StringBuilder มาช่วยในการสร้าง string ได้ แทนที่จะใช้การ Concat



StringBuilder sb = new StringBuilder();
sb.Append("0,1,2,3");
sb.Append(Environment.NewLine);
sb.Append("4,5,6,7");
sb.Append(Environment.NewLine);
sb.Append((char)0); //สำคัญ

string finalString = sb.ToString();



บรรทัดนี้ sb.Append((char)0); เป็นบรรทัดที่สำคัญมาก ตัว char 0 นี้เรียกว่า string terminator สำหรับโปรแกรมพวก excel จะต้องมีตัวนี้ปิดท้ายด้วย ถ้าไม่มี บางครั้งจะทำงานผิดพลาด

เมื่อได้ข้อมูลที่อยู่ในรูป CSV พร้อมแล้ว ก็จับมันใส่ลงไปใน System Clipboard ด้วย code ด้านล่างนี้



byte[] blob = System.Text.Encoding.UTF8.GetBytes(finalString); //finalString จากด้านบน
MemoryStream s = new MemoryStream(blob);
DataObject data = new DataObject();
data.SetData(DataFormats.CommaSeparatedValue,s);
Clipboard.SetDataObject(data);



เท่านี้ก็เรียบร้อยครับ Data ก็จะพร้อม อยู่ใน Clipboard สามารถเอาไป Paste ใน Excel ได้เลย


Create Date : 21 ตุลาคม 2548
Last Update : 21 ตุลาคม 2548 2:30:47 น. 0 comments
Counter : 721 Pageviews.

ชื่อ :
Comment :
  *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

RotoTheHERO
Location :
ปทุมธานี Thailand

[ดู Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed

ผู้ติดตามบล็อก : 1 คน [?]




Friends' blogs
[Add RotoTheHERO's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.