vb.net从DataGridView复制到Excel.代码实现,解决中文乱码问题 (转载+亲自实践)

前端之家收集整理的这篇文章主要介绍了vb.net从DataGridView复制到Excel.代码实现,解决中文乱码问题 (转载+亲自实践)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
DataGridView中存在中文的场合,如果仅仅是直接粘贴Excel的话,会出现乱码,这时候最可靠的是选择性粘贴

网上大部分的说法是:选择性粘贴-->文本

但是本人测试过程中发现,有时候仅仅是文本还不够,依然有可能出现乱码的场合,最保险的就是:选择性粘贴-->Unicode 文本

以下程序是转载内容,我只是将其中的选择性粘贴内容修改为Unicode 文本

同时,程序中的killexcel() 杀掉程序创建的Excel进程方法非常好!!!值得学习@H_301_13@

Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click@H_301_13@ Try@H_301_13@ Dim filepath As String = Application.StartupPath & "/" & Now.ToFileTimeUtc & ".xls"@H_301_13@ Dim objexcel As New Excel.Application()@H_301_13@ Dim objbook As Excel.Workbook = objexcel.Workbooks.Add()@H_301_13@ objbook.SaveAs(filepath)

'设置复制模式为:连同行头和表头一起复制@H_301_13@ Me.DataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText@H_301_13@ '如果不需要复制行头,就把它隐藏掉@H_301_13@ Me.DataGridView1.RowHeadersVisible = False@H_301_13@ '选中DataGridView1的所有内容@H_301_13@ Me.DataGridView1.SelectAll()@H_301_13@ '判断DataGridView1中是否有选中单元格(与上面好像有点矛盾,自行处理)@H_301_13@ If Me.DataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0 Then@H_301_13@ Clipboard.SetDataObject(Me.DataGridView1.GetClipboardContent())@H_301_13@ End If@H_301_13@ '直接在Excel中粘贴@H_301_13@ 'objexcel.ActiveSheet.paste()@H_301_13@ '為防止亂碼。使用選擇性粘貼@H_301_13@ '下面這一行,相當于在Excel中點擊右鍵->選擇性粘貼->文本@H_301_13@ 'objexcel.ActiveSheet.PasteSpecial(Format:="文本",Link:=False,DisplayAsIcon:=False)

'修改为选择性粘贴--> Unicode 文本

objexcel.ActiveSheet.PasteSpecial(Format:="Unicode 文本",DisplayAsIcon:=False)@H_301_13@ '选中Excel所有单元格@H_301_13@ objexcel.Cells.Select()@H_301_13@ '不自动换行@H_301_13@ objexcel.Selection.WrapText = False@H_301_13@ '自动调整列宽@H_301_13@ objexcel.Columns.AutoFit()@H_301_13@ '储存@H_301_13@ objbook.Save()@H_301_13@ '退出@H_301_13@ objbook.Close()@H_301_13@ objexcel.Quit()@H_301_13@ objbook = Nothing@H_301_13@ objexcel = Nothing@H_301_13@ killexcel()@H_301_13@ '提示打开文件@H_301_13@ If MessageBox.Show("档案储存在:" & filepath & ",你要打开吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1) = Windows.Forms.DialogResult.Yes Then@H_301_13@ Process.Start(filepath)@H_301_13@ End If@H_301_13@ Catch ex As Exception@H_301_13@ killexcel()@H_301_13@ MsgBox(ex.Message)@H_301_13@ End Try@H_301_13@ End Sub

'杀掉程序创建的Excel进程@H_301_13@ 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

猜你在找的VB相关文章