好多人都要把GridvIEw的數據導出到Excel的功能,有好多方法,最笨的就是一個一個cell讀取,然後再一個一個填充的Excel中,經過我無數次(也不是了,但確實費了很大功夫)終於實現了。
基本思路就是先把GridVIEw全部選中,然後復制到剪貼板,然後再粘貼到Excel中,就這麼簡單。
全部選中:
this.DataGridVIEw1.SelectAll();
復制到剪貼板:
this.DataGridVIEw1.GetClipboardContent().GetData(DataFormats.Text) ;
粘貼到Excel:
object oMissing = System.Reflection.Missing.Value;
try
...{
excel = new GoldPrinter.ExcelExpert.ExcelBase();
Excel.Visible = false;
Excel.Open();
Excel.Caption = "查詢結果";
Excel.Worksheet xlWorksheet = Excel.WorkSheets.ActiveSheet;
System.Windows.Forms.Clipboard.SetDataObject("");
this.DataGridVIEw1.GetClipboardContent().GetData(DataFormats.Text);
((Excel.Range)xlWorksheet.Cells[1, 1]).Select();
xlWorksheet.Paste(oMissing, oMissing);
System.Windows.Forms.Clipboard.SetDataObject("");
Excel.Visible = true;
xlWorksheet = null;
Excel = null;
}
catch
...{
}
結果總是報錯,難道有錯嗎,仔細查看代碼,發現錯誤再xlWorksheet.Paste(oMissing, oMissing)句時出現,難道不能粘切嗎,太失望了,查MSDN,沒發現什麼有價值的東西。自己試驗,發現如果剪貼板中時純文本就不會就問題,那麼就好辦了,把該句修改Clipboard.SetText(this.DataGridVIEw1.GetClipboardContent().GetData(DataFormats.Text).ToString()); 一切OK!收工回家。
完整代碼:
public void ExpExcel()
...{
object oMissing = System.Reflection.Missing.Value;
try
...{
excel = new GoldPrinter.ExcelExpert.ExcelBase();
Excel.Visible = false;
Excel.Open();
Excel.Caption = "查詢結果";
Excel.Worksheet xlWorksheet = Excel.WorkSheets.ActiveSheet;
System.Windows.Forms.Clipboard.SetDataObject("");
Clipboard.SetText(this.DataGridVIEw1.GetClipboardContent().GetData(DataFormats.Text).ToString());
((Excel.Range)xlWorksheet.Cells[1, 1]).Select();
xlWorksheet.Paste(oMissing, oMissing);
System.Windows.Forms.Clipboard.SetDataObject("");
Excel.Visible = true;
xlWorksheet = null;
Excel = null;
}
catch
...{
}
}
說明:GoldPrinter是用了“長江支流”的金質打印通Excel操作類,在此一同表示感謝!