网上大部分的说法是:选择性粘贴-->文本
但是本人测试过程中发现,有时候仅仅是文本还不够,依然有可能出现乱码的场合,最保险的就是:选择性粘贴-->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