【ArcGIS Pro二次开发】(12):txt文件和Excel文件的读写

news2024/10/5 15:32:22

在Arcgis Pro的工作流中,数据的输入是很常见的。这里以TXT和Excel两种文件为例,在SDK中实现数据的读取和写入。


一、txt文件的读写

txt文件的读写相对简单,可以用Arcgis Pro自带的OpenItemDialog打开txt文件,并直接读取,不需要额外的程序集引用。

1、txt文件内容的读取

下面的例子实现的内容:

通过OpenItemDialog打开指定的txt文件,读取文件第3行的文本,并以消息框提示文本内容。

            // 打开文件对话框
            OpenItemDialog dlg = new OpenItemDialog()
            {
                Title = "选择要打开的文本文件",
                Filter = ItemFilters.TextFiles,
                MultiSelect = false,
            };
            // 如果用户单击“确定”按钮
            if (dlg.ShowDialog() == true)
            {
                // 获取所选文件的完整路径
                string filePath = dlg.Items[0].Path;
                // 读取文件的所有行
                string[] lines = File.ReadAllLines(filePath, Encoding.Default);
                // 如果文件至少有3行
                if (lines.Length >= 3)
                {
                    // 获取第3行的内容
                    string line3 = lines.Length >= 3 ? lines[2] : "该文件不足3行。";
                    // 显示第3行的内容
                    MessageBox.Show("第3行的内容是:" + "\r\n" + line3);
                }
                else
                {
                    // 如果文件不足3行,提示用户
                    MessageBox.Show("该文件不足3行。");
                }
            }

2、txt文件内容的写入

下面的例子实现的内容:

通过OpenItemDialog打开指定的txt文件,在文本的第3行后面插入一行标记文本。

            // 打开文件对话框
            OpenItemDialog dlg = new OpenItemDialog()
            {
                Title = "选择要打开的文本文件",
                Filter = ItemFilters.TextFiles,
                MultiSelect = false,
            };
            // 如果用户单击“确定”按钮
            if (dlg.ShowDialog() == true)
            {
                // 获取所选文件的完整路径
                string filePath = dlg.Items[0].Path;
                // 读取文件的所有行
                string[] lines = File.ReadAllLines(filePath, Encoding.Default);
                // 如果文件至少有3行
                if (lines.Length >= 3)
                {
                    string insertStr = "标记:这是插入内容!";
                    // 在第1行后面插入“标记:这是第一行”
                    lines[2] += $"\r\n{insertStr}";
                    // 将修改后的内容写回文件
                    File.WriteAllLines(filePath, lines);
                    // 显示第3行的内容
                    MessageBox.Show("在第3行后添加内容:" + $"\r\n{insertStr}");
                }
                else
                {
                    // 如果文件不足3行,提示用户
                    MessageBox.Show("该文件不足3行。");
                }
            }

二、Excel文件的读写

Excel文件的读写会复杂一些,首先,需要保证你的电脑上装有Office的Excel,然后添加(勾选)程序集Microsoft Office x.0 Object Library,版本根据你装的Office版本而定。

然后再添加2行using,准备工作完成。

using Microsoft.Office.Interop.Excel;
using Button = ArcGIS.Desktop.Framework.Contracts.Button;

1、Excel文件内容的读取

下面的例子实现的内容:

由于OpenItemDialog不能筛选Excel文件,所以用OpenFileDialog打开指定的Excel文件。(这里虽然后缀名为xls或xlsx,但是建议用xlsx,可以免去一些保存过程中的麻烦)。

后面就是固定流程:建立Excel应用程序对象,打开Excel文件,获取工作表(第一个表),读取指定单元格内容。

最后关闭Excel文件(不保存)和应用程序对象。

            // 定义打开文件对话框
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Excel 文档 (*.xls;*.xlsx)|*.xls;*.xlsx";
            openFileDialog.Multiselect = false;
            openFileDialog.RestoreDirectory = true;
            if (openFileDialog.ShowDialog() == true)
            {
                // 获取文件路径和名称
                string filePath = openFileDialog.FileName;
                // 建立 Excel 应用程序对象
                Application excelApp = new Application();
                // 打开 Excel 文件
                Workbook workbook = excelApp.Workbooks.Open(filePath);
                // 获取工作表
                Worksheet worksheet = workbook.Worksheets[1];
                // 读取单元格内容
                Microsoft.Office.Interop.Excel.Range range = worksheet.Range["C4"];
                string value = range.Value.ToString();
                // 关闭 Excel 文件和应用程序对象
                workbook.Close(false);
                excelApp.Quit();
                MessageBox.Show($"C4单元格的内容为:{value}");
            }

2、Excel文件内容的写入

下面的例子实现的内容:

用OpenFileDialog打开指定的Excel文件,获取工作表,修改指定单元格内容。

最后关闭Excel文件(保存)和应用程序对象。

            // 定义打开文件对话框
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Excel 文档 (*.xls;*.xlsx)|*.xls;*.xlsx";
            openFileDialog.Multiselect = false;
            if (openFileDialog.ShowDialog() == true)
            {
                // 获取文件路径和名称
                string filePath = openFileDialog.FileName;
                // 建立 Excel 应用程序对象
                Application excelApp = new Application();
                // 打开 Excel 文件
                Workbook workbook = excelApp.Workbooks.Open(filePath);
                // 获取工作表
                Worksheet worksheet = workbook.Worksheets[1];
                // 修改单元格的值
                worksheet.Range["C4"].Value = "标记内容";
                //  保存并关闭 Excel 文件和应用程序对象
                workbook.Close(true);
                excelApp.Quit();
                MessageBox.Show($"C4单元格的内容已被修改!");
            }

Excel操作内容比较多,这里只简单介绍了读写操作,其它的删除行、删除列、增加行、增加列、按表名获取表,新建表,合并单元格,取消合并格等,等以后完全研究明白,再单独记一篇笔记。

PS:Office的其它文件,如Word的操作,和Office Excel也比较类似,目前用的不多,就不详述了。


三、工程文件分享

 最后,放上工程文件的链接:

RWFilehttps://pan.baidu.com/s/1vdkukUJHtp60ltdIWiiS6w?pwd=235f

PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

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

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

相关文章

浙江大学海宁IMBA提面经验分享

先来介绍一下我的个人情况:本人毕业于浙江一所普通的本科院校,毕业已经6年了,在一家互联网公司担任市场部经理。其实在参加浙大IMBA项目提面之前,我也参加了浙大MBA项目的提面,可惜只拿到了良好的结果,所以…

力扣-每天的领导和合伙人

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1693. 每天的领导和合伙人二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.…

SWMM从入门到实践教程 04 快速入门案例的模拟执行

文章目录1 模拟时间的设置2 模拟执行3 报告查看3.1 完整报告3.2 总结报告4 纵断面查看5 结果播放1 模拟时间的设置 在左侧双击Options中的Dates,即可弹出时间的设置。此处为了教学,建议仅模拟6个小时,加快结果的生成。实际项目中,…

Gradle 的下载安装教程

Gradle 8.0.1 下载安装教程笔者的环境: Java 17.0.1 Gradle 8.0.1 Windows 10 教育版 64位 在继续阅读本教程之前,需要先完成 JDK 的安装。JDK 需要选择 8 及以上的版本。关于 JDK 的安装,可见笔者的另一篇博客: Java 的下载安…

卷积神经网络之AlexNet

目录概述AlexNet特点激活函数sigmoid激活函数ReLu激活函数数据增强层叠池化局部相应归一化DropoutAlexnet网络结构网络结构分析AlexNet各层参数及其数量模型框架形状结构关于数据集训练学习keras代码示例概述 由于受到计算机性能的影响,虽然LeNet在图像分类中取得了…

【轻轻松松学MongoDB】操作命令02:插入/删除

文档&#xff08;document&#xff09;的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。 一、文档插入 db.collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> } ) 例子&#xff…

【编程基础】009.输入两个正整数m和n,求其最大公约数和最小公倍数。

最大公约数与最小公倍数 题目描述 输入两个正整数m和n&#xff0c;求其最大公约数和最小公倍数。 输入格式 两个整数 输出格式 最大公约数&#xff0c;最小公倍数 样例输入 5 7 样例输出 1 35 题目思路 在这里我们用m表示较大的那个数&#xff0c;n表示较小的数。求…

三分钟拥有自己的 chat-gpt (开发到上线)

三分钟拥有自己的 chat-gpt (开发到上线) 首先你需要有一个 laf 账号&#xff0c;如果你还不知道 laf 是什么&#xff0c;点击这里三分钟学会然后你还需要有一个 chat-gpt 的账号并且生成一个 apiKey (这一步可以问 Google ) 云函数 具备了上面这两个条件我们就可以开始啦。…

CNCF x Alibaba云原生技术公开课 第八章 应用配置管理

Pod配置管理分类 可变配置就用 ConfigMap&#xff1b;敏感信息是用 Secret&#xff1b;身份认证是用 ServiceAccount&#xff1b;资源配置是用 Resources&#xff1b;安全管控是用 SecurityContext&#xff1b;前置校验是用 InitContainers。 1、ConfigMap 概念&#xff1a;…

Java高级技术:单元测试、反射、注解

目录 单元测试 单元测试概述 单元测试快速入门 单元测试常用注解 反射 反射概述 反射获取类对象 反射获取构造器对象 反射获取成员变量对象 反射获取方法对象 反射的作用-绕过编译阶段为集合添加数据 反射的作用-通用框架的底层原理 注解 注解概述 自定义注解 …

堆的结构与实现

堆的结构与实现二叉树的顺序结构堆的概念及结构堆的实现堆的创建向上调整建堆向下调整建堆堆的操作链接二叉树的顺序结构 堆其实是具有一定规则限制的完全二叉树。 普通的二叉树是不太适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树会更适合使用顺…

C++语法规则3(C++面向对象)

多态 C多态意味着调用成员函数时&#xff0c;会根据调用函数的对象的类型来执行不同的函数&#xff1b; 形成多态必须具备三个条件&#xff1a; 必须存在继承关系&#xff1b;继承关系必须有同名虚函数&#xff08;其中虚函数是在基类中使用关键字 virtual 声明的函数&#…

网络编程、通信

目录 网络通信三要素 三要素概述、要素一&#xff1a;IP地址 IP地址操作类-InetAddress 要素二&#xff1a;端口号 要素三&#xff1a;协议 UDP通信 UDP通信&#xff1a;快速入门 UDP通信&#xff1a;多发多收 UDP通信-广播、组播 TCP通信-快速入门 编写客户端代码 …

图文详解红黑树,还有谁不会?

前言在MySQL中&#xff0c;无论是Innodb还是MyIsam&#xff0c;都使用了B树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始&#xff0c;逐步说明各种树解决的问题以及面临的新问题&#xff0c;从而说明MySQL为什么选择B树作为索引结构。目录一、二叉查…

深度学习 Day26——使用Pytorch实现猴痘病识别

深度学习 Day26——使用Pytorch实现猴痘病识别 文章目录深度学习 Day26——使用Pytorch实现猴痘病识别一、前言二、我的环境三、前期工作1、设置GPU导入依赖项2、导入猴痘病数据集3、划分数据集四、构建CNN网络五、训练模型1、设置超参数2、编写训练函数3、编写测试函数4、正式…

2023年江苏省职业院校技能大赛中职网络安全赛项试卷-教师组任务书

2023年江苏省职业院校技能大赛中职网络安全赛项试卷-教师组任务书 一、竞赛时间 9:00-12:00&#xff0c;12:00-15:00&#xff0c;15:00-17:00共计8小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 基础设施设置与安全加固、网络安全事件响应、数…

REDIS16_LRU算法概述、查看默认内存、默认是如何删除数据、缓存淘汰策略

文章目录①. LRU算法概述②. 查看默认内存③. 如何删除数据④. 缓存淘汰策略①. LRU算法概述 ①. LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的数据给予淘汰 (leetcode-cn.com/problems/lru-cache) ②. LRU算法题来源 ③.…

8大主流编程语言的适用领域,你可能选错了语言

很多人学编程经常是脑子一热然后就去网上一搜资源就开始学习了&#xff0c;但学到了后面发现目前所学的东西并不是自己最喜欢的&#xff0c;好像自己更喜欢另一个技术&#xff0c;感觉自己学错了&#xff0c;于是乎又去学习别的东西。 结果竹篮打水一场空&#xff0c;前面所付…

RxJava操作符变换过程

要使用Rxjava首先要导入两个包&#xff0c;其中rxandroid是rxjava在android中的扩展 implementation io.reactivex:rxandroid:1.2.1implementation io.reactivex:rxjava:1.2.0我们在使用rxjava的操作符时都觉得很方便&#xff0c;但是rxjava是怎么实现操作符的转换呢&#xff0…

不会编程也能搭建聊天机器人?ChatGPT + Notion AI助你一臂之力!

体验链接&#xff1a;Aitrend ChatBot (无需环境&#xff0c;无需账号&#xff0c;打开即用&#xff0c;完全免费&#xff0c;回答能力同ChatGPT) 背景介绍 本文主要谈关于如何使用ChatGPT&#xff08;实际使用主力工具为Notion AI&#xff09;&#xff0c;应用官方API接口&…