在Winform 的開(kāi)發(fā)中,經(jīng)常要做Excel的報(bào)表,有些報(bào)表很復(fù)雜,也有簡(jiǎn)單的。
復(fù)雜的就不講了,簡(jiǎn)單的比如說(shuō):要次一個(gè)DataGridView中的數(shù)據(jù)原板原樣的放到Excel中。
通常從DataGridView中取數(shù)據(jù)都是逐行讀取。如果這樣做,遇到數(shù)據(jù)量比較大的時(shí)候,速度會(huì)變得很慢。
不符合需求。
在.net中DataGridView已經(jīng)封裝好復(fù)制的功能??梢灾苯诱{(diào)用。
貼一段核心代碼:使用pubs數(shù)據(jù)庫(kù)中的jobs資料表
在使用粘貼板的時(shí)候有可能亂碼(因?yàn)镈ataGridView和Excel的格式是不一樣的。)
解決方法 在粘貼的時(shí)候使用Excel中的選擇性粘貼功能。
'下面這一行,相當(dāng)于在Excel中點(diǎn)擊右鍵->選擇性粘貼->文本
objexcel.ActiveSheet.PasteSpecial(Format:="文本", Link:=False, DisplayAsIcon:=False)
運(yùn)行效果圖:

源代碼:
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Try
- Dim filepath As String = Application.StartupPath & "/" & Now.ToFileTimeUtc & ".xls"
- Dim objexcel As New Excel.Application()
- Dim objbook As Excel.Workbook = objexcel.Workbooks.Add()
- objbook.SaveAs(filepath)
-
-
- Me.DataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText
-
- Me.DataGridView1.RowHeadersVisible = False
-
- Me.DataGridView1.SelectAll()
-
- If Me.DataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0 Then
- Clipboard.SetDataObject(Me.DataGridView1.GetClipboardContent())
- End If
-
-
-
-
- objexcel.ActiveSheet.PasteSpecial(Format:="文本", Link:=False, DisplayAsIcon:=False)
-
- objexcel.Cells.Select()
-
- objexcel.Selection.WrapText = False
-
- objexcel.Columns.AutoFit()
-
- objbook.Save()
-
- objbook.Close()
- objexcel.Quit()
- objbook = Nothing
- objexcel = Nothing
- killexcel()
-
- If MessageBox.Show("檔案儲(chǔ)存在:" & filepath & ",你要打開(kāi)嗎?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) = Windows.Forms.DialogResult.Yes Then
- Process.Start(filepath)
- End If
- Catch ex As Exception
- killexcel()
- MsgBox(ex.Message)
- End Try
- End Sub
-
-
- Private Sub killexcel()
- Try
- For Each proc As Process In Process.GetProcessesByName("EXCEL")
- If proc IsNot Nothing AndAlso proc.MainWindowTitle = "" Then
- proc.Kill()
- End If
- Next
- Catch ex As Exception
- Throw ex
- End Try
- End Sub