21.2.2 保存

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

如果打开某个Excel文件修改后,需要保存到原文件或者用新的文件名保存,在 Excel.Application.Quit() 前使用Workbook.Save() 或 Workbook.SaveAs(新文件名称) 就可以了。

但是对于要把数据(并非通过打开Excel文件获得的数据)保存成Excel文件,那么可以按照以下步骤:

1、新建了一个Application对象:

Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();

2、新建工作簿并添加到创建的Application对象:

Workbook Wbook = xls.Workbooks.Add();

3、 使用原有的工作表,一般默认创建Wbook后会有sheet1、sheet2、sheet3三个工作表,可以使用上一节方法指定一个工作表写数据。

或者新建工作表:

Worksheet Wsheet = Wbook.Worksheets.Add();

并按需要指定工作表名称,如不指定,那么新工作表默认名称为 Sheet4:

Wsheet.Name = "电脑销售表"

4、读取现有数据并写入单元格,需要注意的是Excel单元格的起始序号为1:

Wsheet.Cells[行号,列号].value = "值";

5、保存工作簿

Workbook.SaveAs(文件名称);

6、最后,别忘了关闭打开的 Excel:

xls.Quit();

【例 21.2【项目:code21-002】保存数据库表中的数据到Excel。

         //Northwind中查询产品表数据并显示到DataGridView

        private void Button1_Click(object sender, EventArgs e)

        {

            OleDbConnection connection = new OleDbConnection();

            connection.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=c:\\lessons\\northwind.mdb;";

            //为简化,这里只取得了10条记录

            string CommandText = "select top 10 产品名称,单位数量,单价,库存量 from 产品";

            DataSet ds = new DataSet("Northwind");

            OleDbDataAdapter adapter = new OleDbDataAdapter();

            adapter.SelectCommand = new OleDbCommand();

            adapter.SelectCommand.CommandText = CommandText;

            adapter.SelectCommand.Connection = connection;

            System.Data.DataTable dt = ds.Tables.Add();

            dt.TableName = "产品";

            adapter.Fill(dt);

            DataGridView1.DataSource = ds.Tables["产品"];

            adapter.Dispose();

            connection.Close();

        }

       //另存为

        private void Button2_Click(object sender, EventArgs e)

        {

            string filename;

            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Filter = "表格文件|*.xls;*.xlsx";

            if (sfd.ShowDialog() != DialogResult.OK)

                return;

            else

                filename = sfd.FileName;

            Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();

            Workbook Wbook;

            //使用Add方法新建一个工作簿

            Wbook = xls.Workbooks.Add();

            Worksheet Wsheet;

            Wsheet = Wbook.Worksheets.Add();

            //如果不新建工作表,可以使用默认工作表,比如:

            //Wsheet = Wbook.Worksheets[1];

            //设置工作表名称

            Wsheet.Name = "产品表";

            //处理列标题,写入Excel表第一行

            if (DataGridView1.Columns.Count > 1)

                for (int i = 0; i < DataGridView1.ColumnCount; i++)

                    Wsheet.Cells[1,i+1].Value = DataGridView1.Columns[i].HeaderText;

  

            if( DataGridView1.Rows.Count > 0)

            {

                for(int i = 0;i< DataGridView1.RowCount;i++)

                {

                    //注意:如果是新行的话,获取值会出错,这里把新行排除

                    //或者直接设置DataGridView1AllowUserToAddRows属性为false

                    if (DataGridView1.Rows[i].IsNewRow)

                        break;

                    for(int j = 0;j< DataGridView1.ColumnCount;j++)

                    {

                        //将数据写到Excel

                        //单元格行从索引2开始,而DataGridView1中的行数据从索引0开始,所以+2

                        //单元格列从索引1开始,而DataGridView1中的列数据从索引0开始,所以+1

                        Wsheet.Cells[i + 2, j + 1].value = DataGridView1.Rows[i].Cells[j].Value.ToString();

                    }

                }

            }

            //保存到指定文件

            Wbook.SaveAs(filename);

            //退出

            xls.Quit();

            MessageBox.Show("保存完毕");

        }

运行结果如下图所示:

图21-4 按下“保存”按钮后提示保存完毕

保存的Excel文件如下图所示:

图21-5 Excel中的数据

实际操作中如果不需要显示数据,可以不使用DataGridView控件,从数据库读数据后直接写入Excel。

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

 

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

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

相关文章

华水967数据结构2024真题(回忆版)

一、 选择[10道) (20分). 1、数据结构中&#xff0c;从逻辑结构上可以把数据结构分为() 答案&#xff1a;线性结构和非线性结构 2、给了一个二叉树的中序遍历&#xff0c;求二叉树的后序遍历 解析&#xff1a; 要根据中序遍历的结果来推导后序遍历&#xff0c;需要知道二叉…

除了网页,还有哪些方式可以访问deepseek r1

DeepSeek R1 是一款先进的人工智能模型&#xff0c;用户可以通过多种方式进行访问和使用&#xff1a; 官方网站&#xff1a;用户可以直接访问 DeepSeek 的官方网站&#xff0c;注册账户后即可使用其在线服务。 API 集成&#xff1a;开发者可以通过 DeepSeek 提供的 API&#x…

Deepseek v3R1 学习笔记

o1 o1 模型在训练过程中混合了多种奖励函数的设计方法&#xff0c;并且尝试从结果监督转向过程监督&#xff0c;在中间过程进行打分 使用的搜索策略&#xff1a;基于树的搜索和基于顺序修改的搜索 R1 R1-Zero 是从基础模型开始&#xff0c;完全由强化学习驱动&#xff0c;不…

Linux特权组全解析:识别GID带来的权限提升风险

组ID&#xff08;Group ID&#xff0c;简称 GID&#xff09;是Linux系统中用来标识不同用户组的唯一数字标识符。每个用户组都有一个对应的 GID&#xff0c;通过 GID&#xff0c;系统能够区分并管理不同的用户组。 在Linux系统中&#xff0c;系统用户和组的配置文件通常包括以…

时间对象管理相关

在SpringBoot项目中&#xff0c;这段时间感觉对于时间的处理是个比较繁琐的问题&#xff0c;现将一些常用的时间处理记录下。 一般来说&#xff0c;在MySQL数据库中时间字段选择DateTime&#xff0c;java中实体类时间字段使用Date类型&#xff0c;为了转换方便&#xff0c;使用…

mybatisgenerator接入

1、引入plugin <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.mybatis.generator</groupId>&l…

NacosRce到docker逃逸实战

NacosRce到docker逃逸实战 1、Nacos Derby Rce打入内存马 这个漏洞的原理大家应该都知道&#xff0c; 2.3.2 < Nacos < 2.4.0版本默认derby接口未授权访问&#xff0c;攻击者可利用未授权访问执行SQL语句加载构造恶意的JAR包导致出现远程代码执行漏洞。 在日常的漏洞挖…

SpringCloud速通教程

视频地址 文档地址 3. SpringCloud - 快速通关

mini-lsm通关笔记Week2Day6

项目地址&#xff1a;https://github.com/skyzh/mini-lsm 个人实现地址&#xff1a;https://gitee.com/cnyuyang/mini-lsm Summary 在本章中&#xff0c;您将&#xff1a; 实现WAL日志文件的编解码 系统重启时使用WAL日志恢复memtable 要将测试用例复制到启动器代码中并运行…

《手札·开源篇》基于开源Odoo软件与Deepseek的智能企业管理系统集成方案

一、方案背景 随着企业数字化转型的深入&#xff0c;传统ERP系统需要结合AI技术实现智能化升级。本方案将开源ERP系统Odoo与深度求索&#xff08;Deepseek&#xff09;大模型能力深度整合&#xff0c;构建具备智能决策支持、自然语言交互和数据分析增强的企业管理平台。 二、…

【DeepSeek背后的技术】系列三:强化学习(Reinforcement Learning, RL)

目录 1 简介1.1 强化学习&#xff08;RL&#xff09;简介1.2 基于人类反馈的强化学习 (RLHF) 简介1.2.1 四个重要角色1.2.2 三个步骤 2 强化算法2.1 PPO&#xff08;Proximal Policy Optimization&#xff09;2.1.1 核心思想2.1.2 算法步骤2.1.3 优点2.1.4 缺点2.1.5 应用场景 …

LabVIEW的智能电源远程监控系统开发

在工业自动化与测试领域&#xff0c;电源设备的精准控制与远程管理是保障系统稳定运行的核心需求。传统电源管理依赖本地手动操作&#xff0c;存在响应滞后、参数调节效率低、无法实时监控等问题。通过集成工业物联网&#xff08;IIoT&#xff09;技术&#xff0c;实现电源设备…

SpringBoot开发(四)SpringBoot配置文件

1. SpringBoot配置文件 1.1. 配置端口号和路径 &#xff08;1&#xff09;在application.properties文件下配置端口号和路径。 server.port: 8081 server.servlet.context-path/demo&#xff08;2&#xff09;运行访问。 1.2. 自定义配置 1.2.1. 方式一 &#xff08;1&…

算法随笔_40: 爬楼梯

上一篇:算法随笔_39: 最多能完成排序的块_方法2-CSDN博客 题目描述如下: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&am…

C# List 列表综合运用实例⁓Hypak原始数据处理编程小结

C# List 列表综合运用实例⁓Hypak原始数据处理编程小结 1、一个数组解决很麻烦引出的问题1.1、RAW 文件尾部数据如下:1.2、自定义标头 ADD 或 DEL 的数据结构如下&#xff1a; 2、程序 C# 源代码的编写和剖析2.1、使用 ref 关键字&#xff0c;通过引用将参数传递&#xff0c;以…

win32汇编环境,窗口程序中自定义工具栏的使用示例

;运行效果 ;win32汇编环境,窗口程序中自定义工具栏的使用示例 ;工具栏一般放在菜单下面&#xff0c;相当于一个个小的对话框&#xff0c;当然你放在其它地方也可以。 ;原理是&#xff0c;创建一张BMP位图&#xff0c;比如下例用一张168*24的图&#xff0c;平均分成7部分&#x…

机器学习专业毕设选题推荐合集 人工智能

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光&#xff0c;一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…

备考蓝桥杯嵌入式4:使用LCD显示我们捕捉的PWM波

上一篇博客我们提到了定时器产生PWM波&#xff0c;现在&#xff0c;我们尝试的想要捕获我们的PWM波&#xff0c;测量它的频率&#xff0c;我们应该怎么做呢&#xff1f;答案还是回到我们的定时器上。 我们知道&#xff0c;定时器是一个高级的秒表&#xff08;参考笔者的比喻&a…

ArrayList 扩容机制的源码剖析

在 Java 编程中&#xff0c;ArrayList是一个常用的集合类&#xff0c;它实现了List接口&#xff0c;底层基于数组实现。与普通定长数组不同&#xff0c;ArrayList能够根据元素的添加情况动态调整数组的大小&#xff0c;这就是其扩容机制。下面我们将深入剖析ArrayList扩容机制的…

Java 面试之结束问答

技术优化 线程池优化 设置最大线程数设置最小核心线程数设置额外线程存活时间选择线程池队列选择合适的线程池选择合适的饱和策略 锁优化 尽量不要锁住方法缩小同步代码块&#xff0c;只锁数据锁中尽量不要再包含锁将锁私有化&#xff0c;在内部管理锁进行适当的锁分解 HT…