<VB.net>下CSV文件的导入(读取到DataGridView)和导出(DataGirdView保存到csv)

这篇具有很好参考价值的文章主要介绍了<VB.net>下CSV文件的导入(读取到DataGridView)和导出(DataGirdView保存到csv)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 创建项目

VB.net项目主要使用微软旗下的Visual Studio 2022编辑器来进行,打开VS2022.新建一个VB.net窗体项目,保存。

然后在窗体上添加以下控件:
DataGridView(数据表格控件)、Label(标签控件)、ContextMenuStrip(右键关联菜单控件)等
<VB.net>下CSV文件的导入(读取到DataGridView)和导出(DataGirdView保存到csv)
然后,设置DataGridView控件的contextmenustrip属性(关联到添加的contextmenustrip控件上)。

2 编写程序

由于需要读取csv文档,所以需要添加一些namespace。

2.1 导入namespace

Imports System.IO
Imports System.Text
Imports CsvHelper

上面的namespace中,system.IO是windows用于读取流数据的类,而CsvHelper是一个.NET程序包,其封装了.net的文本读取类textreader,提供便捷的处理csv文档api接口。

2.2 cvs文件导入

使用streamreader读取csv为流数据,使用csvhelper提供的函数,获取一个idatareader的实例(datatable数据格式),再新建一个datatable,使用load加载csv的数据,然后将datatable的数据添加到datagridview控件上,或者直接使用DataSource绑定datatable(不过我用这个方法,读取的csv数据无法编辑,暂时不清楚原因)

Private Sub import_csv(fl As String)



        Dim strd1 As StreamReader = Nothing

        Try

            strd1 = New StreamReader(fl, Encoding.GetEncoding("gb2312"))    '中文编码gb2312

            Dim csv = New CsvReader(strd1, CultureInfo.InvariantCulture)

            Dim dr = New CsvDataReader(csv)

            Dim dt = New DataTable()

            dt.Load(dr)

            DataGridView1.Rows.Clear()

            For i = 0 To dt.Rows.Count - 1

                Dim inx0 = DataGridView1.Rows.Add()

                For j = 0 To dt.Columns.Count - 1


                    DataGridView1.Columns(j).HeaderText = dt.Columns(j).ToString()

                    DataGridView1.Rows(i).Cells(j).Value = dt.Rows(i).Item(j).ToString()

                Next

            Next


            strd1.Dispose()

            csv.Dispose()

            dr.Dispose()

            dt.Dispose()


        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.OkOnly, "tip!")

        Finally

            strd1.Close()

        End Try

    End Sub

2.2 导出csv

由于表格数据中,数据都是在单元格中,所以,将datagridview中的数据导出为csv,就是把单元格的数据一一对应赋值即可。
同样是使用流数据操作,首先打开一个已存在的csv文档或者新建一个(文件路径),然后获取文件的流(stream),使用streamwriter,将数据写入流中(也就是写入csv文件中),完成后记得释放资源(dispose)。
其中麻烦一点的,是需要算一下datagridview的单元格与csv文档的单元是如何一一对应的,不过,这种程序网上很多,不需要自己花费时间去计算,按照网上的程序,自己修改一下即可。

 Private Sub export_csv(dgv As DataGridView, s1 As Stream)

        Using sw1 As New StreamWriter(s1, Encoding.Default)

            Dim columntitle As String = ""
            Try
                For i As Integer = 0 To dgv.ColumnCount - 1
                    If i > 0 Then
                        columntitle += ","
                    End If
                    columntitle += dgv.Columns(i).HeaderText
                Next

                columntitle.Remove(columntitle.Length - 1)
                sw1.WriteLine(columntitle)

                For j As Integer = 0 To dgv.Rows.Count - 1
                    Dim columevalue As String = ""
                    For k As Integer = 0 To dgv.Columns.Count - 1

                        If k > 0 Then
                            columevalue += ","
                        End If

                        If dgv.Rows(j).Cells(k).Value Is Nothing Then
                            columevalue += ""
                        Else
                            Dim m As String = dgv.Rows(j).Cells(k).Value.ToString().Trim()
                            columevalue += m.Replace(",", ", ")
                        End If

                    Next

                    columevalue.Remove(columevalue.Length - 1)
                    sw1.WriteLine(columevalue)

                Next
                sw1.Close()
                s1.Close()


            Catch ex As Exception

            Finally
                sw1.Close()
                s1.Close()

            End Try

        End Using


    End Sub

3 说明

这个例子没有测试过大量数据的csv文档的读取,只是提供了一个实现的方法。如果是那种有大量数据的读写,应该需要多线程来实现(将文件分割读取,否则加载时应该会等很久)。

演示视频:

vb.net下csv导入导出演示

完整代码:文章来源地址https://www.toymoban.com/news/detail-447698.html


Imports System.Windows.Forms.DataVisualization.Charting
Imports System.IO
Imports System.Text
Imports CsvHelper
Imports System.Globalization
Public Class Form9

    Public series1 As Series
    Public caiyang_num As Integer
    Public caiyang_time As Integer
    Private Sub Form9_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Me.Text = "表格浏览器"

        DataGridView1.Columns.Add("col1", "X 坐标(100ms)")
        DataGridView1.Columns.Add("col2", "Y 坐标(mm/10000)")

        For i = 0 To DataGridView1.Columns.Count - 1

            DataGridView1.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable     '列的排序模式

        Next

        If series1 IsNot Nothing Then
            chart_data_show(series1)
        End If
        Label8.Text = caiyang_num.ToString() & "个"
        Label9.Text = caiyang_time.ToString() & "ms"

    End Sub

    Private Sub chart_data_show(s1 As Series)

        For i = 0 To s1.Points.Count - 1

            Dim inx0 = DataGridView1.Rows.Add()

            DataGridView1.Rows(inx0).SetValues(s1.Points(i).XValue.ToString())
            DataGridView1.Rows(inx0).Cells(1).Value = s1.Points(i).YValues(0).ToString()

        Next

        caiyang_num = s1.Points.Count

    End Sub


    Private Sub 导入数据CSVToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 导入数据CSVToolStripMenuItem.Click


        OpenFileDialog1.Filter = "CSV(逗号分隔)(*.csv)|*.csv|文本文件(*.txt)|*.txt|所有文件 (*.*)|*.*"
        OpenFileDialog1.InitialDirectory = "C:\User\rongjv\Desktop\"
        OpenFileDialog1.RestoreDirectory = True

        Dim fl As String = Nothing
        If OpenFileDialog1.ShowDialog = DialogResult.OK Then

            fl = OpenFileDialog1.FileName

            Dim fi1 = New FileInfo(fl)

            If fi1.Length > 1048576 Then
                Label5.Text = String.Format("{0,10:#.0000}", fi1.Length / 1024 / 1024) & "MB"
            Else
                Label5.Text = String.Format("{0,10:#.0000}", fi1.Length / 1024) & "KB"
            End If

            Label3.Text = fl

            import_csv(fl)

        End If




    End Sub

    Private Sub 导出数据CSVToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 导出数据CSVToolStripMenuItem.Click

        Dim st1 As Stream = Nothing

        SaveFileDialog1.Filter = "CSV(逗号分隔)(*.csv)|*.csv|文本文件(*.txt)|*.txt|所有文件 (*.*)|*.*"
        SaveFileDialog1.InitialDirectory = "C:\User\rongjv\Desktop\"
        SaveFileDialog1.RestoreDirectory = True


        If SaveFileDialog1.ShowDialog = DialogResult.OK Then



            st1 = SaveFileDialog1.OpenFile()

            Label4.Text = SaveFileDialog1.FileName

            export_csv(DataGridView1, st1)

            st1.Dispose()

        End If

    End Sub

    Private Sub import_csv(fl As String)



        Dim strd1 As StreamReader = Nothing

        Try

            strd1 = New StreamReader(fl, Encoding.GetEncoding("gb2312"))    '中文编码gb2312

            Dim csv = New CsvReader(strd1, CultureInfo.InvariantCulture)

            Dim dr = New CsvDataReader(csv)

            Dim dt = New DataTable()

            dt.Load(dr)

            DataGridView1.Rows.Clear()

            For i = 0 To dt.Rows.Count - 1

                Dim inx0 = DataGridView1.Rows.Add()

                For j = 0 To dt.Columns.Count - 1


                    DataGridView1.Columns(j).HeaderText = dt.Columns(j).ToString()

                    DataGridView1.Rows(i).Cells(j).Value = dt.Rows(i).Item(j).ToString()

                Next

            Next


            strd1.Dispose()

            csv.Dispose()

            dr.Dispose()

            dt.Dispose()


        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.OkOnly, "tip!")

        Finally

            strd1.Close()

        End Try

    End Sub

    Private Sub export_csv(dgv As DataGridView, s1 As Stream)

        Using sw1 As New StreamWriter(s1, Encoding.Default)

            Dim columntitle As String = ""
            Try
                For i As Integer = 0 To dgv.ColumnCount - 1
                    If i > 0 Then
                        columntitle += ","
                    End If
                    columntitle += dgv.Columns(i).HeaderText
                Next

                columntitle.Remove(columntitle.Length - 1)
                sw1.WriteLine(columntitle)

                For j As Integer = 0 To dgv.Rows.Count - 1
                    Dim columevalue As String = ""
                    For k As Integer = 0 To dgv.Columns.Count - 1

                        If k > 0 Then
                            columevalue += ","
                        End If

                        If dgv.Rows(j).Cells(k).Value Is Nothing Then
                            columevalue += ""
                        Else
                            Dim m As String = dgv.Rows(j).Cells(k).Value.ToString().Trim()
                            columevalue += m.Replace(",", ", ")
                        End If

                    Next

                    columevalue.Remove(columevalue.Length - 1)
                    sw1.WriteLine(columevalue)

                Next
                sw1.Close()
                s1.Close()


            Catch ex As Exception

            Finally
                sw1.Close()
                s1.Close()

            End Try

        End Using


    End Sub

    Private Sub 清空数据ToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles 清空数据ToolStripMenuItem1.Click

        DataGridView1.Rows.Clear()

    End Sub
End Class

到了这里,关于<VB.net>下CSV文件的导入(读取到DataGridView)和导出(DataGirdView保存到csv)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot整合easyExcel实现CSV格式文件的导入导出

    目录 一:pom依赖 二:检查CSV内容格式的工具类 三:Web端进行测试 四:拓展使用 使用hutool工具类来进行导出功能

    2024年02月02日
    浏览(36)
  • Neo4j的使用+导入导出csv文件

    1.进入cmd控制界面,然后进入到自己的NEO4J的bin目录下,输入neo4j,然后其会展示一些neo4j的命令。 2.先进行 neo4j install-service 操作,安装控制服务台,再进行 neo4j start 命令打开,然后 neo4j console 打开控制台。 复制网址并打开 http://localhost:7474 第一次进入需注册,初始密码是n

    2024年02月03日
    浏览(79)
  • C#使用MiniExcel导入导出数据到Excel/CSV文件

    MiniExcel简介 简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。 目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。 特点: 低内存耗用,避免

    2024年02月19日
    浏览(30)
  • PL/SQL 中的数据导入和导出:CSV 文件格式详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在 PL/SQL 开发中,数据的导入和导出是常见的操作。本文将深入探讨如何使用 PL/SQL 导入和导出 CSV 文件格式的数据

    2024年02月12日
    浏览(35)
  • CSV导出(通过读取数据字节流直接上传文件到服务器)

    文件之前读取大多数都是用前端点击相应传入后端,通过HttpServletResponse response得输入输出流进行导入导入导出数据。 近期碰到得需求是定时查询数据库数据并通过csv文件上传至系统。所以不能使用HttpServletResponse,因为对应文件流比较熟悉所以最开始使用文件流进行读写数据

    2024年02月12日
    浏览(42)
  • Azure DevOps Server 2022新功能:导入和导出到CSV文件,实现批量修改工作项

    Azure DevOps Server(之前名称为TFS)作为微软的软件研发管理平台产品,由于系统涉及到软件开发的全过程和多种角色,服务器中积累了大量的软件开发过程数据,例如需求、评审、Bug和测试用例等。在对这些数据进行批量操作(例如批量更新、导入、导出和数据分析)的过程中,进

    2024年02月05日
    浏览(37)
  • vb.net 实现excel导入的时候滚动显示导入的数据

      如果你想在 Excel 导入过程中滚动显示导入的数据,可以使用逐行读取 Excel 数据并在滚动窗口中显示。 在 VB.NET 中,你可以使用 Excel.Range 对象逐行读取 Excel 数据,并将每行数据添加到滚动窗口(如 ListBox 或 TextBox )中进行显示。以下是一个示例代码,展示如何实现逐行滚动

    2024年02月05日
    浏览(28)
  • C# DataGridView数据导出Excel文件

    博主在做项目的时候需要把数据库的数据用DataGridView展示,然后把展示的数据导出为Excel文件,很多时候我们做项目都会有一个下载文件的按钮,我们需要用微软的的接口,Microsoft.Office.Interop.Excel,我们需要导入这个引用对DataGridView数据进行处理,利用Microsoft.Office.Interop.Exc

    2024年02月04日
    浏览(91)
  • UE4蓝图导入导出csv

    表头 csv表格结构,第一列‘’行命名‘’为ue默认结构,需要自己添加,第二列及以后为自定义表头 选择第二步建的表,重新导入 输出行即为表中一行数据的每一列,在表头复杂时,有多个输出行; 主要是字符串的拼接操作 totalStr为总的需要导出的数据拼接字符串。需要默

    2024年02月16日
    浏览(48)
  • postgis数据库导出csv表再导入postgis

    直接拖过去 再导入postgis数据库中

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包