21.2.1 基本操作

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

Excel的基本操作步骤:

1、打开Excel:定义了一个Application对象:

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

注意:Application对象的Visible属性决定了在运行时是否显示Excel,如果为true,就显示;如果为false则不显示,默认为false。

2、打开工作簿:通常使用Workbooks的Open方法来打开一个现有文档,例如图21--2中打开Northwind.xls:

Workbook Wbook = xls.Workbooks.Open("c:\\lessons\\Northwind.xls");

3、得到所有工作表的集合Worksheets:

Worksheets Wsheets = (Worksheets)Wbook.Worksheets;

4、单个的工作表Worksheet,单个的工作表可以通过两种方式获得,比如得到图21-2中的产品表:

Worksheet Wsheet =Worksheets[序号];,如Worksheets[1]

或者

Worksheet Wsheet =Worksheets[工作表名];,如Worksheets["产品"]

还可以略过Worksheets:

Worksheet Wsheet = Wbook.Worksheets[1];

5、定义并获得一个Worksheet后,就可以操作对应表里面的数据。

Worksheet的Rows属性和Columns属性分别对应了行和列的集合。使用Worksheet.Rows.Count 和 worksheet.Columns.Count 获得工作表的行数和列数,这两个数字对应Excel97-2003版本文件(*.xls文件)分别是 65535 和 256;对于Excel2007及以后版本(*.xlsx文件)是1048576 和16384。要想获得里面的数据,必须对rows和columns进行遍历,但是,这两个数字实在是太大了,通常使用:

Worksheet.UsedRange.Columns.CountWorksheet.UsedRange.Rows.Count

来获得有效使用的行数和列数。

通过 Worksheet.Cells[行号,列号].Value 即可获得对应单元格的值

但是需要注意的是,如果那个单元格为空,会引发错误,可以先做判断值是否为null。

注意:Excel中的索引号是从1开始的。

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

xls.Quit();

【例 21.1【项目:code21-001】读取Excel工作表数据。

使用到的xls文件是图21-2中的Northwind.xls。

在窗体上放置1个ListView控件,名称为lvExel,它的View属性为Details。

具体代码如下:

        //载入数据

        private void Button1_Click(object sender, EventArgs e)

        {

            string filename;

            OpenFileDialog ofd = new OpenFileDialog();

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

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

            {

                return;

            }

            else

            {

                filename = ofd.FileName;

            lvExcel.Items.Clear();

            }

            Label1.Text = filename;

            //定义一个Application

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

            //打开Excel文档

            Workbook Wbook = xls.Workbooks.Open(filename);

            //定义Worksheet

            Worksheet Wsheet;

            //Worksheet设置为第一个工作表

            Wsheet = Wbook.Worksheets[1];

            //或者

            //Wsheet = Wbook.Worksheets["产品"];

            //最大列数

            int maxColumn;

            //最大行数

            int maxRow;

            //第一行数据作为列表头

            if( Wsheet.Rows.Count > 1)

            {

                lvExcel.Columns.Clear();

                //最大列数设置为有效列数

                maxColumn = Wsheet.UsedRange.Columns.Count;

                //最大行数设置为有效行数

                maxRow = Wsheet.UsedRange.Rows.Count;

                //循环获得第一行的单元格内容

                for(int i= 1;i<= maxColumn;i++)

                {

                    //设置列表头,需要判断是否是Nothing

                    if (Wsheet.Cells[1, i].Value == null)

                        //无数据

                        lvExcel.Columns.Add("()");

                    else

                        lvExcel.Columns.Add(Convert.ToString(Wsheet.Cells[1, i].Value));

                }

                //从第二行开始的行作为数据

                for(int j= 2;j<= maxRow;j++)

                {

                    ListViewItem Lv = new ListViewItem();

                    string LvText;

                    if (Wsheet.Cells[j, 1].Value==null)

                        LvText = "()";

                    else

                        LvText = Convert.ToString(Wsheet.Cells[j, 1].Value);

                    Lv.Text = LvText;

                    string subLvText;

                for(int k = 2;k<= maxColumn;k++)

                    {

                        if (Wsheet.Cells[j, k].Value == null)

                            subLvText = "()";

                        else

                            subLvText = Convert.ToString(Wsheet.Cells[j, k].Value);

                        Lv.SubItems.Add(subLvText);

                    }

                    //添加到ListView

                    lvExcel.Items.Add(Lv);

                }

            }

            //退出

            xls.Quit();

        }

运行结果如下图所示:

图21-3 读取到的数据

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

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

 

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

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

相关文章

SGlang 专为大模型设计的高效服务框架

SGlang 是一种专为大型语言模型&#xff08;LLM&#xff09;和视觉语言模型&#xff08;VLM&#xff09;设计的高效服务框架&#xff0c;旨在提升模型的推理速度和灵活性。以下是关于 SGlang 框架的详细介绍&#xff1a; 1. 框架背景与目标 SGlang 是一种快速服务框架&#x…

基于SpringBoot+vue高效旅游管理系统

Spring Boot后端与Vue前端融合&#xff1a;构建高效旅游管理系统 目录 一、项目简介 二、开发技术与环境配置 2.1 SpringBoot框架 2.2 Java语言简介 2.3 Vue的介绍 2.4 mysql数据库介绍 2.5 B/S架构 三、系统功能实现 四、系统项目截图 登录页面 后台管理页面 用户…

visual studio安装

一、下载Visual Studio 访问Visual Studio官方网站。下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 在主页上找到并点击“下载 Visual Studio”按钮。 选择适合需求的版本&#xff0c;例如“Visual Studio Community”&#xff08;免费版本&#xff09;&#x…

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)

目录 1 -> List 1.1 -> 创建List组件 1.2 -> 添加滚动条 1.3 -> 添加侧边索引栏 1.4 -> 实现列表折叠和展开 1.5 -> 场景示例 2 -> dialog 2.1 -> 创建Dialog组件 2.2 -> 设置弹窗响应 2.3 -> 场景示例 3 -> form 3.1 -> 创建…

Java中的object类

1.Object类是什么&#xff1f; &#x1f7ea;Object 是 Java 类库中的一个特殊类&#xff0c;也是所有类的父类(超类),位于类继承层次结构的顶端。也就是说&#xff0c;Java 允许把任何类型的对象赋给 Object 类型的变量。 &#x1f7e6;Java里面除了Object类&#xff0c;所有的…

manimgl安装

一、环境 笔记本 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammy二、安装miniconda3 manimgl基于python开发&#xff0c;为了防止将笔记本中已有的python环境破坏&#xff0c;因此…

c++中priority_queue的应用及模拟实现

1.介绍 priority_queue 是一种数据结构&#xff0c;它允许你以特定的顺序存储和访问元素。在 C 标准模板库&#xff08;STL&#xff09;中&#xff0c;priority_queue 是一个基于容器适配器的类模板&#xff0c;它默认使用 std::vector 作为底层容器&#xff0c;并且默认使用最…

【技术追踪】DiffMIC:用于医学图像分类的双引导扩散网络(MICCAI-2024)

似乎是第一个用于医学图像分类的扩散模型嗷~ 论文&#xff1a;DiffMIC: Dual-Guidance Diffusion Network for Medical Image Classification 代码&#xff1a;https://github.com/scott-yjyang/DiffMIC 0、摘要 扩散概率模型最近在生成式图像建模中表现出了显著的性能&#xf…

Deepseek v3R1 学习笔记

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

技术书籍写作与编辑沟通指南

引言 撰写技术书籍不仅仅是知识的输出过程&#xff0c;更是与编辑团队紧密合作的协同工作。优秀的技术书籍不仅依赖作者深厚的技术背景&#xff0c;还需要精准的表达、流畅的结构以及符合出版要求的编辑润色。因此&#xff0c;如何高效地与编辑沟通&#xff0c;确保书籍质量&a…

DeepSeek+Ollama+AnythingLLM 本地部署完全指南,打造专属知识库

DeepSeekOllamaAnythingLLM 本地部署完全指南&#xff0c;打造专属知识库 1 Ollama 本地化部署DeepSeek R1 Ollama 是一个用于本地运行大语言模型&#xff08;LLMs&#xff09;的开源工具&#xff0c;提供简单的界面和优化的推理引擎 &#xff0c;使用户能够在个人设备上高效…

更换IP属地会影响网络连接速度吗

在数字化时代&#xff0c;网络连接速度对于个人用户和企业来说都至关重要。无论是日常浏览网页、观看视频&#xff0c;还是进行在线办公、游戏娱乐&#xff0c;网络速度都直接影响着我们的体验。而IP属地&#xff0c;作为网络连接中的一个重要元素&#xff0c;其变动是否会引发…

2025 持续防范 GitHub 投毒,通过 Sharp4SuoExplorer 分析 Visual Studio 隐藏文件

在2024年底的网络安全事件中&#xff0c;某提权工具被发现植入后门&#xff0c;攻击者利用 .suo 文件作为隐蔽的攻击方式。由于 .suo 文件是 Visual Studio 项目的隐藏配置文件&#xff0c;通常不为安全研究人员所关注&#xff0c;因此为攻击者提供了潜在的攻击渠道。 初步调查…

每日Attention学习19——Convolutional Multi-Focal Attention

每日Attention学习19——Convolutional Multi-Focal Attention 模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Convolutional Multi-Focal Atte…

【自然语言处理(NLP)】NLP实战:IMDB影评情感分析项目

文章目录 介绍IMDB影评情感分析项目数据集项目实现1. 导包2. 加载IMDB数据3. 查看部分数据4. 分词5. 加载数据整合6. 构建模型7. 词嵌入8. 初始化模型和权重9. glove词向量10. 训练和评估11. 预测 个人主页&#xff1a;道友老李 欢迎加入社区&#xff1a;道友老李的学习社区 介…

企业高效管理策略中的关键一环:WorkWin 监控上网时间的软件的效能剖析

在企业日常运营体系中&#xff0c;员工工作效率与网络资源的合理配置&#xff0c;始终是企业管理者重点关注的核心议题。伴随互联网的广泛普及&#xff0c;员工在工作时段内的网络使用行为日益常态化。然而&#xff0c;若缺乏行之有效的上网时间管控机制&#xff0c;极易导致员…

Spring AI 智能体通过 MCP 集成本地文件数据

作者&#xff1a;刘军 Model Context Protocol&#xff08;MCP&#xff09;简介 模型上下文协议&#xff08;即 Model Context Protocol&#xff0c;MCP&#xff09; [ 1] 是一个开放协议&#xff0c;它规范了应用程序如何向大型语言模型&#xff08;LLM&#xff09;提供上下…

DIY Shell:探秘进程构建与命令解析的核心原理

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; Shell&#xff08;外壳&#xff09;是一个操作系统的用户界面&#xff0c;它提供了一种方式&#xff0c;使得用户能够与操作系统进行交互。Shell 是用户与操作系统之间的桥梁&#xff0c;允许用户通过命令行…

新春贺岁,共赴AGI之旅

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 往期精彩文章推荐 季姮教授独家文字版干货 | 面向知识渊博的大语言模型 关于AI TIME AI TIME源起于2019年&#xff0c;旨在发扬科学思辨精神&#xff0c;邀请各界人士对人工智能理论、算法和场景应用的本质问题…

FastAPI之参数传递和参数校验

FastAPI之参数传递 一、请求URL传参1、URL传参2、一个参数名&#xff0c;多个值3、参数校验3.1、默认值设置&#xff0c;和参数接口描述3.2、字符串长度校验3.3、正则表达式校验3.4、数值大小校验 二、请求体传参1、请求体单个传参 一、请求URL传参 1、URL传参 url请求参数是…