WinForms C# 导入和导出 CSV 文件 Spread.NET

使用 WinForms C# 和 VB.NET 导入和导出 CSV 文件

2023 年 11 月 17 日
使用 Spread.NET 直接在 .NET WinForms 应用程序中处理 CSV 文件。

Spread.NET可帮助您创建电子表格、网格、仪表板和表单。它包括一个强大的计算引擎,具有 450 多个函数以及导入和导出 Microsoft Excel 电子表格的能力。开发人员可以利用广泛的 .NET 电子表格 API 和强大的计算引擎来创建分析、预算、仪表板、数据收集和管理、科学和财务应用程序。

在此博客中,MESCIUS 产品经理 Kevin Ashley 将带您完成使用 Spread.NET 导入和导出 CSV 文件中的数据所需的所有步骤,包括:

  • 创建/配置项目
  • 创建文件菜单
  • 创建/配置SplitContainer
  • 添加事件处理程序代码
  • ...以及更多!

将在运行时使用 Spread Designer 工具,只需一行代码即可在运行的应用程序中编辑 Excel 电子表格实例。最后,我将展示如何创建一个简单的前端电子表格用户界面,将 FpSpread 电子表格控件与 NameBox和 FormulaTextBox 控件集成,使用分割窗格创建主用户界面,以及如何实现菜单项来处理 文件 - C# 和 VB中的“打开”、“文件 - 保存”和 “文件 - 设计” 命令 。

以下是在 C# 和 VB.net WinForms 中导入和导出 CSV 文件的步骤:

  • 创建项目
  • 配置项目
  • 创建文件菜单
  • 创建SplitContainer1
  • 配置SplitContainer1
  • 创建SplitContainer2
  • 创建 FpSpread
  • 创建名称框
  • 创建公式文本框
  • 创建 WinForms 电子表格设计器组件
  • 为文件菜单项创建事件处理程序
  • 添加事件处理程序代码

这些步骤需要:

  • Microsoft Visual Studio 2022(注意:虽然这些步骤适用于 VS2022 和 .NET 6,但 Spread.NET WinForms 也可以在面向 .NET 4.6.2+ 的早期版本的 Visual Studio 中工作,遵循这些相同的步骤)
  • Spread.NET for WinForms(试用版或许可版)- 在此处获取 Spread.NET WinForms 的 30 天免费试用版 
 

第 1 步:创建项目

创建一个新项目

我们可以首先在Visual Studio 2022中创建一个新项目  ,选择 C#、Windows和 Desktop来筛选项目,然后选择C# 或 VB  WinForms App

第 2 步:配置项目

配置项目

输入 SpreadWinformsCSVIO作为 项目名称

第 3 步:创建文件菜单

现在,让我们添加一个MenuStrip。在 “工具箱” 窗口 ( F4 ) 的“菜单和工具栏”类别下,双击 MenuStrip组件以 在窗体中创建一个新的 MenuStrip :

菜单条工具箱

 

 通过使用关联的快捷键单击,创建 “文件 – 打开”、  “文件 – 保存”、  “文件 – 另存为”、  “文件 – 设计”和 “文件 – 退出”菜单项:

文件菜单

 

请注意, 文件 - 保存 菜单项最初应被禁用。菜单分隔符(  对菜单项文本使用“-”来创建菜单分隔符)和快捷键是可选的,但建议使用。我们将在稍后的步骤中为这些菜单项添加代码。

步骤4:创建SplitContainer1

注意: 使用 FpSpread 并不一定需要添加拆分器,但 SplitContainer 控件使创建友好且灵活的电子表格界面变得更加容易,因为它会自动处理电子表格、名称框和公式文本框控件的大小调整,而无需任何代码。

在 工具箱 ( CTRL+ALT+X ) 中,展开Containers类别 ,然后双击 SplitContainer 控件以创建 splitContainer1

 

拆分容器工具箱

步骤5:配置SplitContainer1

在 “属性” 窗口 ( F4 ) 中,对于 splitContainer1,将 Orientation设置 为 Horizo​​ntal,然后将 Panel1MinSize 和 SplitterDistance设置 为 23

SplitContainer 1 属性

 

电子表格将位于底部窗格中,编辑栏界面将位于顶部窗格中,拆分器将确定FormulaTextBox控件的高度,  以显示换行的长公式。

第6步:创建SplitContainer2

在 工具箱 ( CTRL+ALT+X ) 中,将新的SplitContainer拖放 到splitContainer1的  顶部窗格 ( Panel1 ) 内 以创建 splitContainer2

拆分容器 2

在 “属性” 窗口 ( F4 ) 中,对于 splitContainer2,将Panel1MinSize 和 SplitterDistance 设置  为 150

SplitContainer2 属性

第 7 步:创建 FpSpread

在 “解决方案资源管理器”中,展开 “解决方案 SpreadNetQuickStart” 和 “项目 SpreadNetQuickStart”,然后右键单击 “依赖项” 并选择 “管理 NuGet 包...”  (或按 ALT+P+N+N+N+ENTER):

管理 NuGet 包

 

然后,在NuGet Package Manager中,选择  左上角的 Browse ,然后 在搜索框中 键入Spread.WinForms以查找最新的GrapeCity.Spread.WinForms,然后单击 Install

NuGet 包管理器

 

安装 GrapeCity.Spread.WinForms后,继续安装 GrapeCity.Spread.WinForms.Design  – 该软件包包含 fpSpreadDesigner 组件,用于在运行时显示 Spread Designer 工具。

然后,在工具箱 ( CTRL+ALT+X ) 中,选择 FpSpread 控件:

 

FpSpread工具箱

最后,将FpSpread的实例绘制 到SplitContainer1的 底部窗格 ( Panel2 ) 中。当您创建控件时, Spread 设计器工具  可能会打开(这是默认行为) - 现在,  如果出现 ,请关闭Spread 设计器。

 

Fp传播形式

使用 属性网格 (F4),将 Dock 属性设置为 Fill:

 

FpSpread 扩展坞

第 8 步:创建名称框

在 工具箱 ( CTRL+ALT+X ) 中,展开GrapeCity Spread for WinForms的类别  ,然后选择 NameBox 控件:

名称框工具箱

 在左上角的 Panel1  ( SplitContiner2.Panel1 ) 内绘制一个新的 NameBox

姓名框表格

在 “属性” 窗口 ( F4 ) 中,对于 nameBox1,将Dock 设置  为 Fill

名称框属性

在nameBox1的右上角 ,单击指示器打开 NameBox Tasks,然后单击 AttachTo 下拉列表并选择 fpSpread1  – 这将以代码隐藏形式生成代码,以将 NameBox 控件附加到 FpSpread 控件:

 

名称框附件

第 9 步:创建 FormulaTextBox

在 工具箱 ( CTRL+ALT+X ) 中,展开 容器 并选择 面板 控件:

面板工具箱

 

在Panel2内 ( NameBox1 右侧 ),绘制一个新的 Panel

面板 2 表格

在 “属性” 窗口 ( F4 ) 中,对于 panel1,将BorderStyle 设置  为 FixSingle 并将 Dock设置 为 Fill

面板 1 属性

在 工具箱 (CTRL+ALT+X) 中, 选择 FormulaTextBox 控件:

公式文本框工具箱

在panel1  (位于 splitContainer2.Panel2内部)内 ,绘制一个新的FormulaTextBox 控件:

公式文本框表单

在 FormulaTextBox1 的属性 窗口 ( F4 ) 中,将BorderStyle 设置  为 None 并将 Dock设置 为 Fill

公式文本框属性

在FormulaTextBox1的右上角 ,单击指示器打开 FormulaTextBox 任务, 然后单击 AttachTo 下拉列表并选择 fpSpread1  – 这将以代码隐藏形式生成代码,以将 FormulaTextBox 控件附加到 FpSpread控件:

公式文本框附件

步骤 10:创建 WinForms 电子表格设计器组件

现在,在Toolbox 窗口 ( CTRL+ALT+X ) 的 GrapeCity Spread Design for WinForms 类别下  双击 FpSpreadDesigner组件以 在表单中 创建一个新的 FpSpreadDesigner :

FpSpread 设计器工具箱

刚刚添加的fpSpreadDesigner1组件  应显示在组件 menuStrip1 fpSpread1_Sheet1旁边的表单组件托盘中:

FpSpread 设计器表单

步骤 11:为文件菜单项创建事件处理程序

文件菜单处理程序设计

对于“文件”菜单中的每个菜单项  ,在设计视图中双击该菜单项,直到每个菜单项都有一个在 VB 或 C# 代码中生成的关联菜单处理程序:

文件菜单处理程序

第 12 步:添加事件处理程序代码

复制以下代码来实现事件处理程序:

[C#]

添加事件处理程序代码 C#

private string mFileName = null;private void openToolStripMenuItem_Click(object sender, EventArgs e)
{OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "CSV file (*.csv)|*.csv| All Files (*.*)|*.*";ofd.FilterIndex = 0;if (ofd.ShowDialog() == DialogResult.OK){mFileName = ofd.FileName;fpSpread1.Sheets[0].LoadTextFile(mFileName, FarPoint.Win.Spread.TextFileFlags.None, FarPoint.Win.Spread.Model.IncludeHeaders.None, "", ",", "");saveToolStripMenuItem.Enabled = true;}
}private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{fpSpread1.Sheets[0].SaveTextFile(mFileName, FarPoint.Win.Spread.TextFileFlags.None, FarPoint.Win.Spread.Model.IncludeHeaders.None, "", ",", "");
}private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{SaveFileDialog sfd = new SaveFileDialog();sfd.Filter = "CSV file (*.csv)|*.csv| All Files (*.*)|*.*";sfd.FilterIndex = 0;sfd.FileName = mFileName;if (sfd.ShowDialog() == DialogResult.OK){mFileName = sfd.FileName;fpSpread1.Sheets[0].SaveTextFile(mFileName, FarPoint.Win.Spread.TextFileFlags.None, FarPoint.Win.Spread.Model.IncludeHeaders.None, "", ",", "");saveToolStripMenuItem.Enabled = true;}
}private void designToolStripMenuItem_Click(object sender, EventArgs e)
{fpSpreadDesigner1.ShowDialog(fpSpread1);
}private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{DialogResult ret = MessageBox.Show("Do you want to save this file before closing?", "Save Spreadsheet", MessageBoxButtons.YesNoCancel);if (ret == DialogResult.Cancel)return;else if (ret == DialogResult.Yes)saveToolStripMenuItem_Click(null, EventArgs.Empty);Close();
}
复制

[VB]

添加事件处理程序代码 VB

Private mFileName As String = NothingPrivate Sub OpenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OpenToolStripMenuItem.ClickDim ofd As New OpenFileDialogofd.Filter = "CSV file (*.csv)|*.csv| All Files (*.*)|*.*"ofd.FilterIndex = 0If ofd.ShowDialog() = DialogResult.OK ThenmFileName = ofd.FileNameFpSpread1.Sheets(0).LoadTextFile(mFileName, FarPoint.Win.Spread.TextFileFlags.None, FarPoint.Win.Spread.Model.IncludeHeaders.None, "", ",", "")SaveToolStripMenuItem.Enabled = TrueEnd If
End SubPrivate Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveToolStripMenuItem.ClickFpSpread1.Sheets(0).SaveTextFile(mFileName, FarPoint.Win.Spread.TextFileFlags.None, FarPoint.Win.Spread.Model.IncludeHeaders.None, "", ",", "")
End SubPrivate Sub SaveAsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveAsToolStripMenuItem.ClickDim sfd As SaveFileDialog = New SaveFileDialog()sfd.Filter = "CSV file (*.csv)|*.csv| All Files (*.*)|*.*"sfd.FilterIndex = 0sfd.FileName = mFileNameIf sfd.ShowDialog() = DialogResult.OK ThenmFileName = sfd.FileNameFpSpread1.Sheets(0).SaveTextFile(mFileName, FarPoint.Win.Spread.TextFileFlags.None, FarPoint.Win.Spread.Model.IncludeHeaders.None, "", ",", "")SaveToolStripMenuItem.Enabled = TrueEnd If
End SubPrivate Sub DesignToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DesignToolStripMenuItem.ClickFpSpreadDesigner1.ShowDialog(FpSpread1)
End SubPrivate Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.ClickDim ret As DialogResult = MessageBox.Show("Do you want to save this file before closing?", "Closing", MessageBoxButtons.YesNoCancel)If ret = DialogResult.Cancel ThenReturnElseIf ret = DialogResult.Yes ThenSaveToolStripMenuItem_Click(Nothing, EventArgs.Empty)End IfClose()
End Sub
复制

文件 - 打开的代码  使用 OpenFileDialog 浏览 CSV 文件,然后使用 FpSpread.Sheets.LoadTextFile方法打开选定的 CSV 文件。文件 - 保存的代码 使用 FpSpread.Sheets.SaveTextFile将电子表格数据保存到 CSV,文件- 另存为的代码 使用 SaveFileDialog 允许用户将文件保存到另一个位置或使用另一个名称。此功能允许 C# 或 VB.NET CSV 文件导入和导出。

File-Design 中的代码使用 FpSpreadDesigner.ShowDialog 方法在运行时显示 Spread Designer 工具,进行更改,然后将这些更改应用回表单中的电子表格实例。最后, “文件 - 退出”中的代码  提示用户是否保存文件,然后使用 Close 方法关闭窗体。

准备好构建和运行!

最终结果

该项目已准备好构建和运行。文件设计菜单将  在运行时打开Spread Designer工具,如上所示,它可以将更改应用于表单中运行的电子表格实例。了解 Spread .NET 如何让您能够在应用程序中使用 C# 或 VB.NET 将电子表格导入和导出为 CSV。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/149290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全测试工具分为 SAST、DAST和IAST 您知道吗?

相信刚刚步入安全测试领域的同学都会发现,安全测试领域工具甚多,不知如何选择!其实安全测试工具大致分为三类:SAST、DAST和IAST。本文就带大家快速的了解这三者的本质区别! SAST (Static Application Secu…

浪涌防护器件要选对,布局布线更重要!|深圳比创达电子EMC(下)

浪涌测试,作为最常见的EMC抗干扰测试项目之一,基本上是家用消费电子必测的项目;其测试目的是为了验证产品在承受外部的浪涌冲击时能否正常工作。 一、比创达整改案例 1) 背景: 某智能插座产品在浪涌测试,需要过2kV差…

基于IDEA进行Maven工程构建

Java全能学习面试指南:https://javaxiaobear.cn 1. 构建概念和构建过程 项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中…

振弦式渗压计的安装方式及注意要点

振弦式渗压计的安装方式及注意要点 振弦式渗压计是一种高精度、高效率的地下水位测量仪器。它可以测量地下水位的高度,计算地下水的压力,从而推算出地下水的流量。对于地下水资源管理和保护、治理工程等方面具有非常重要的意义。在安装振弦式渗压计时&a…

【大数据开发】FineReport报表基础入门

博主:👍不许代码码上红 欢迎:🐋点赞、收藏、关注、评论。 格言: 大鹏一日同风起,扶摇直上九万里。 文章目录 一 登录账号二 创建一个新的表格三 单元格扩展3.1 无扩展3.2 纵向扩展3.3 横向扩展 四 父子格…

【开源】基于JAVA的超市自助付款系统

项目编号: S 008 ,文末获取源码。 \color{red}{项目编号:S008,文末获取源码。} 项目编号:S008,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 商品类型模块2.2 商品模块2.3 超市账…

RabbitMQ消息的可靠性

RabbitMQ消息的可靠性 一 生产者的可靠性 生产者重试 有时候由于网络问题,会出现连接MQ失败的情况,可以配置重连机制 注意:SpringAMQP的重试机制是阻塞式的,重试等待的时候,当前线程会等待。 spring:rabbitmq:conne…

三菱FX3U小项目—运料小车自动化

目录 一、项目描述 二、IO口分配 三、项目流程图 四、项目程序 五、总结 一、项目描述 设备如下图所示,其中启动按钮SB1用来开启运料小车,停止按钮SB2用来手动停止运料小车(其工作方式任务模式要求)。当小车在原点SQ1位置,按下启动按钮S…

SpringCloudAlibaba系列之Nacos服务注册与发现

目录 说明 认识注册中心 Nacos架构图 Nacos服务注册与发现实现原理总览 SpringCloud服务注册规范 服务注册 心跳机制与健康检查 服务发现 主流服务注册中心对比 小小收获 说明 本篇文章主要目的是从头到尾比较粗粒度的分析Nacos作为注册中心的一些实现,很…

IDEA无法查看源码是.class,而不是.java解决方案?

问题:在idea中,ctrl鼠标左键进入源码,但是有时候会出现无法查看反编译的源码,如图! 而我们需要的是方法1: mvn dependency:resolve -Dclassifiersources 注意:需要该模块的目录下,不是该文件目…

buildadmin+tp8表格操作(7)表格的事件监听

buildadmin 中的事件都已经在 baTable类中定义好了。我们一般不会去修改,万一我们要在事件上有所操作, 我们可以通过事件的 前置和后置 钩子函数来处理 那么我们是如何使用这些钩子呢? 我们只需要在 创建对象的时候,定义好这些钩…

性能压力测试的优势与重要性

性能压力测试是软件开发过程中至关重要的一环,它通过模拟系统在极限条件下的运行,以评估系统在正常和异常负载下的表现。这种测试为确保软件系统的可靠性、稳定性和可伸缩性提供了关键信息。下面将探讨性能压力测试的优势以及为什么在软件开发中它具有不…

传输层协议 - UDP(User Datagrm Protocol)

文章目录: 传输层再谈端口号端口号划分知名端口号(Well-Know Port Number)netstat 命令iostat 命令pidof UDP 协议UDP 协议格式UDP 协议的特点面向数据报UDP 的缓冲区UDP 使用注意事项UDP 协议的应用基于 UDP 的应用层协议 在 DDoS 攻击中如何…

2023年中国吞咽神经和肌肉电刺激仪市场发展趋势分析:产品需求持续增长[图]

吞咽神经和肌肉电刺激仪是通过输出特定的低频脉冲电流对吞咽及构音功能相关的神经和肌肉进行电刺激,改善吞咽、构音肌群的收缩运动功能,缓解神经元麻痹,促进吞咽反射弧的重建与恢复,进而提高患者的吞咽及语言能力。 吞咽神经和肌…

医院陪诊服务预约小程序的作用如何

对陪诊服务提供者及需求者来说,平台很重要,对服务提供者而言,通过微信私信/电话联系的形式很容易出现漏服务的情况,如遇需求者内容/地址/联系方式/哪家医院等信息提供不清或临时改变主意等,非常烦恼,同时各…

【带头学C++】----- 七、链表 ---- 7.5 学生管理系统(链表--上)

目录 1.main函数设计 2.定义Node节点类型 3.链表插入结点 在main函数中调用插入函数、打印函数 插入结点函数实现(头插法) 插入结点函数实现(尾插法) 遍历链表函数实现 4.演示插入、遍历结果 目录 1.main函数设计 2.定义…

nvm 安装后出现的各种问题解决方法

1、nvm安装后无法安装node版本 首先需要确定删除了电脑上所有的node版本,如果不会卸载那么请移步到 查看 ,我们是要通过nvm来下载node环境,所以之前下载的node有冲突,所以都要清除。 2、下载后的nvm环境,无法使用node、…

《深入浅出OCR》实战:基于PGNet的端到端识别

✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。 💙个人主页: GoAI |💚 公众号: GoAI的学习小屋 | 💛交流群: 7049325…

团结引擎已全面支持 OpenHarmony 操作系统

Unity 中国宣布与开放原子开源基金会达成平台级战略合作。 据称团结引擎已全面支持 OpenHarmony 操作系统,同时将为 OpenHarmony 生态快速带来更多高品质游戏与实时 3D 内容。Unity 称现在用户可以 “在 OpenHarmony 框架中感受到与安卓和 iOS 同样丝滑的游戏体验”…

SQL 文本函数

前言 SQL文本函数是SQL语言中非常有用的一类函数,它们用于处理和操作字符串数据。在实际应用中,我们经常需要对数据库中的文本数据进行各种操作,比如提取子串、替换子串、拼接字符串等等。而SQL文本函数可以帮助我们轻松地完成这些任务&#…