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

本文提供了一种将DataGridView中的中文数据导入Excel的可靠方法,包括使用DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText设置复制模式,隐藏行头以避免乱码,并通过选择性粘贴Unicode文本来确保数据正确导入。
DataGridView中存在中文的场合,如果仅仅是直接粘贴Excel的话,会出现乱码,这时候最可靠的是选择性粘贴

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

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

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

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

    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
            '选中DataGridView1的所有内容
            Me.DataGridView1.SelectAll()
            '判断DataGridView1中是否有选中单元格(与上面好像有点矛盾,自行处理)
            If Me.DataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0 Then
                Clipboard.SetDataObject(Me.DataGridView1.GetClipboardContent())
            End If
             '直接在Excel中粘贴
            'objexcel.ActiveSheet.paste()
            '為防止亂碼。使用選擇性粘貼
            '下面這一行,相當于在Excel中點擊右鍵->選擇性粘貼->文本
            'objexcel.ActiveSheet.PasteSpecial(Format:="文本", Link:=False, DisplayAsIcon:=False)

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

             objexcel.ActiveSheet.PasteSpecial(Format:="Unicode 文本", Link:=False, DisplayAsIcon:=False)
            '选中Excel所有单元格
            objexcel.Cells.Select()
            '不自动换行
            objexcel.Selection.WrapText = False
            '自动调整列宽
            objexcel.Columns.AutoFit()
            '储存
            objbook.Save()
            '退出
            objbook.Close()
            objexcel.Quit()
            objbook = Nothing
            objexcel = Nothing
            killexcel()
            '提示打开文件
            If MessageBox.Show("档案储存在:" & filepath & ",你要打开吗?", "提示", 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

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

【源码免费下载链接】:https://renmaiwang.cn/s/sw3v0 在.NET框架中,`DataGridView`控件是一种常用的数据展示组件,它可以方便地显示表格数据,并提供了丰富的交互功能。本文将详细讲解如何在`DataGridView`中实现Excel的双向复制粘贴功能,使得用户能轻松地在两者之间进行数据迁移。我们需要了解`DataGridView`的基本操作。`DataGridView`是Windows Forms应用程序中的一个核心组件,它允许用户查看和编辑二维表格数据。可以通过编程方式或设计时界面添加列和行,设置数据源,以及自定义其外观和行为。实现Excel的复制粘贴功能主要涉及以下步骤:1. **复制操作**:在`DataGridView`中,当用户选中一些单元格并按下Ctrl+C时,我们需要捕获这个事件。可以监听`CellMouseDown`和`CellMouseUp`事件,判断是否满足复制条件(如选区不为空)。然后,我们可以使用`Clipboard`类来设置剪贴板内容,如`Clipboard.SetDataObject`方法,将选中的单元格数据转换为字符串数组或自定义对象,以便于Excel读取。2. **粘贴操作**:在`DataGridView`中,用户按下Ctrl+V时,我们需要解析剪贴板中的数据并将其插入到表格中。同样,可以监听`CellMouseDown`事件,检查是否有粘贴操作的权限。使用`Clipboard.GetDataObject`获取剪贴板数据,根据数据类型(可能是文本、HTML、Excel表格等)进行相应处理,然后通过`DataGridView.Rows.Add`或`DataGridView.CurrentRow.Cells[index].Value = value`等方法插入数据。3. **Excel与`DataGr
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值