C#操作Excel总结

2023-11-02

0. 导入命名空间: 

1
2
3
4
using  Microsoft.Office.Core;
using  Microsoft.Office.Interop.Excel;
using  System.IO;
using  System.Reflection;

 

1. 如何打开已有excel文档,或者创建一个新的excel文档 

 

1
2
3
Application app = new  Application();
Workbooks wbks = app.Workbooks;
_Workbook _wbk = wbks.Add(xxx);

 

 

若打开已有excel,把“xxx”替换成该excel的文件路径;

注:若新建一个excel文档,“xxx”替换成true即可;不过这里新建的excel文档默认只有一个sheet。

  

2. 取得、删除和添加sheet

 

1
Sheets shs = _wbk.Sheets;

 

 

2.1取得:

 

1
2
//i是要取得的sheet的index
_Worksheet _wsh = (_Worksheet)shs.get_Item(i)

 

 

2.2 删除:

1
2
3
//删除sheet必须的设置
app.DisplayAlerts = false ;
_wsh.Delete();

2.3 添加:

1
2
//a(before),b(after):确定添加位置;c:数目;d:类型
app.Worksheets.Add(a,b,c,d);

2.4 sheet的重命名

1
_wsh.Name = "xxx" ;

 

3. 删除行和列 

3.1 删除行:

1
((Range)_wsh.Rows[3, Missing.Value]).Delete(XlDeleteShiftDirection.xlShiftUp);

3.2 删除列:

1
2
3
4
_wsh.get_Range(
_wsh.Cells[1, 2],
_wsh.Cells[_wsh.Rows.Count, 2]).Delete(XlDeleteShiftDirection.xlShiftToLeft
);

 

4. 添加行和列 

4.1 添加行:

1
2
((Range)_wsh.Rows[11, Missing.Value])
.Insert(Missing.Value, XlInsertFormatOrigin.xlFormatFromLeftOrAbove);

4.2 添加列:

1
2
3
_wsh.get_Range(
_wsh.Cells[1, 1], _wsh.Cells[_wsh.Rows.Count, 1])
.Insert(Missing.Value, XlInsertShiftDirection.xlShiftToRight);

 

5. 单元格操作 

5.1 单元格的取得

1
2
//获得单元格对象
_wsh.Cells[row, cell]

5.2 设置公式

1
2
//在对应的单元格输入公式即可
_wsh.Cells[row, cell] = "=Sum(A1/B1)" ;

5.3 合并单元格

1
((Range)_wsh.Rows[1, Missing.Value]).Merge(Missing.Value);

5.4 设置行高和列宽

1
2
((Range)_wsh.Rows[3, Missing.Value]).RowHeight = 5;
((Range)_wsh.Rows[3, Missing.Value]).ColumnWidth = 5;

5.5 设置单元格颜色 颜色共有56中,详情请参照附录的[颜色对照表]

1
((Range)_wsh.Rows[1, Missing.Value]).Interior.ColorIndex = 3;

5.6 设置字号

1
((Range)_wsh.Cells[1, "B" ]).Font.Size = 8;

5.7 是否设置粗体

1
((Range)_wsh.Rows[1, Missing.Value]).Font.Bold = false ;

5.8 单元格/区域、水平垂直居中

1
((Range)_wsh.Cells[2, 1]).HorizontalAlignment = XlVAlign.xlVAlignCenter;

5.9 设置区域边框

1
((Range)_wsh.Cells[3, 3]).Borders.LineStyle = 3;

5.10 设置边框的上、下、左、右线条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//左
_wsh.get_Range(
_wsh.Cells[2, 1], _wsh.Cells[2, 2])
.Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick; //
 
//右
_wsh.get_Range(
_wsh.Cells[2, 1], _wsh.Cells[2, 2])
.Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick; //
 
//上
_wsh.get_Range(
_wsh.Cells[2, 1], _wsh.Cells[2, 2])
.Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick; //下
 
//下
_wsh.get_Range(
_wsh.Cells[2, 1], _wsh.Cells[2, 2])
.Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;

6. 指定区域的复制 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
_Worksheet _wsh = (_Worksheet)shs.get_Item(1); //复制选中区域的内容
 
Range range = _wsh.get_Range(_wsh.Cells[7, 1], _wsh.Cells[10, _wsh.Columns.Count]);
 
range.Select();
range.Copy(Type.Missing);
 
//选中粘贴的起始位置
Range test = ((Range)_wsh.Cells[11, 1]);
test.Select();
 
//屏蔽掉Alert,默认确定粘贴
app.DisplayAlerts = false ;
test.Parse(Missing.Value, Missing.Value);

 

注:Type.Missing和Missing.Value,在excel的操作中被视为某些参数的默认值,他们起到的作用很多时候是形式补足参数

 

7. excel文件的保存,及后续处理 

7.1 文件保存

1
2
3
4
5
//屏蔽掉系统跳出的Alert
app.AlertBeforeOverwriting = false ;
 
//保存到指定目录
SaveAs(filePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

注:这个地方只能采用该方法保存,不然在指定路径下保存文件外,在我的文档中也会生成一个对应的副本

7.2 后续处理:退出和释放

1
2
3
4
5
6
7
//_wbk.Close(null, null, null);
//wbks.Close();
app.Quit();
 
//释放掉多余的excel进程
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
app = null ;

说明:在application关闭的过程中,通常我们有两种方案:

#直接退出app

#先关闭workbook,然后关闭workbooks,最后在退出app

鉴于这两种方式,或许本质上是一样的(这点需要证明),但是依据我们软件开发的原则:哪里需要哪里声明,哪里结束哪里释放回收。

既然在直接退出app的时候,我们不清楚workbook和workbooks具体在什么时间关闭,不如在结束的时候直接手动关闭,这样做可以做到资源的快速直接回收;

所以,建议采用先关闭workbook,然后关闭workbooks,最后在退出app。

 

8. 关于单元格设置域和取得域里需要的数据 

8.1 若单元格已经设置为下拉框

1
2
3
//这里的“1,2,3”设置的就是下拉框的值
((Range)_wsh.Cells[2, 1])
.Validation.Modify(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, Type.Missing, "1,2,3" , Type.Missing);

8.2 若单元格还没有设置为下拉框的形式

1
2
((Range)_wsh.Cells[2, 1])
.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, Type.Missing, "1,2,3" , Type.Missing);

8.3 取得下拉框域的值

1
string  strValue = ((Range)_wsh.Cells[2, 1]).Validation.Formula1;

注:若在excel模板中通过有效性设定了下拉框的值,strValue得到的将会是excel里的公式,需将其转换, 取得strValue后,可以根据其索引得到你需要的数值;

 

9. 隐藏行和隐藏列 

9.1 隐藏行

1
_wsh.get_Range(_wsh.Cells[19, 1], _wsh.Cells[22, 1]).EntireRow.Hidden = true ;

9.2 隐藏列

1
2
_wsh.get_Range(_wsh.Cells[1, 1], _wsh.Cells[_wsh.Rows.Count, 1])
.EntireColumn.Hidden = true ;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#操作Excel总结 的相关文章

  • 15-Scala使用Option、Some、None,避免使用null

    1 避免null使用 大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是 无 在Java 它是null 在Java 里 null 是一个关键字 不是一个对象 所以对它调用任何方法都是非法的 但是这对语言设计者来说是一件令人疑惑的选
  • java.lang.reflect.UndeclaredThrowableException原因和解决方法

    在 Spring AOP中调用一个方法来进行数据验证 一旦数据验证失败 抛出一个自定义的异常 然而 却抛出了java lang reflect UndeclaredThrowableException 查了一下 因为我的自定义异常继承Exc
  • PHP-Tpthink5学习记录1(后台管理平台)

    Mysql数据库Mac安装 https www cnblogs com yanlin 10 p 9388911 html Tp5安装 方式一 http www thinkphp cn donate download id 874 html
  • Python使用Socket和多线程实现简单的TCP服务端和客户端通信

    本文主要是使用Socket的方式进行Python的网络编程 结合多线程完成服务端同时连接多个客户端的程序 学习了解Socket的主要工作流程 本文目录 一 关于Socket 1 Socket简介 2 Socket的主要类型 3 Socket
  • On-call机制——一种有效运维的方法

    对于On cal这一词 国内并没有特别明确的说法 因为这是个欧美流传过来的叫法 国内与之相接近的意思大致就是值班 再详细一些的说法便是指企业为了快速相应生产故障或者重大事件 在某段时间内指定某个人或者某组人随时待命 类似值班 在故障发生的一
  • 真随机游走的R语言代码

    Rwalk lt vector Rwalk 1 lt rnorm 1 for i in 2 60 Rwalk i lt Rwalk i 1 rnorm 1 ts Rwalk lt ts Rwalk win graph width 4 8 h
  • 在vs2008上面编译CGAL代码,error LNK2019: 无法解析的外部符号 _GetProcessMemoryInfo@12

    在vs2008上面编译CGAL代码 出现error LNK2019 无法解析的外部符号 GetProcessMemoryInfo 12这样的错误 在项目 配置属性 链接器 输入 附加依赖项在附加依赖项窗口中加上Psapi lib 可解决问题
  • 基础编程练习 7-14 求整数段和 (15 分)

    这个题需要掌握的是每5个数换一行 可以用 来进行实现 默认scanf的输入数据是右对齐的 关键在于 当输入正好的 5的倍数个数时 会打印两个换行 请看一下注释 include
  • js阻止默认事件(a标签跳转),阻止事件冒泡

    最近刚学习完js基础 今天发现对js的默认事件阻止以及阻止事件的冒泡有点忘记 于是写这篇文章算是做一个总结 也是加深一下印象 1 阻止默认事件 在html中有很多自带默认事件的元素 很典型的例子 a标签 如果给a标签绑定点击事件 触发后页面
  • C++中的lambda函数详解

    本文主要讲解C 中的lambda函数的使用方法与注意事项 谓词 为了理解lambda函数 首先要理解C 中的谓词是什么 语言中的谓词大部分情况下指一个动作 类似的 在C 中 所谓的谓词 就是指能作出一些动作的对象 换言之 也就是一些可调用的
  • 二、GRE(Generic Routing Encapsulation,通用路由封装协议)

    2 GRE 2 1 概念 GRE Generic Routing Encapsulation 通用路由封装协议 是一种传统的隧道协议技术 GRE对某些网络层协议的数据报进行封装 使这些被封装的数据报能够在IPv4网络中传输 2 2 GRE的
  • 【数模】主成分分析PCA

    主成分分析 Principal Component Analysis PCA 是一种降维算法 它能将多个指标转换为少数几个主成分 这些主成分是原始变量的线性组合 且彼此之间互不相关 其能反映出原始数据的大部分信息 使用场景 一般来说 当研究
  • EFT测试78L05损坏分析及解决方案

    I 问题现象 CQC样机送检时发现 经过EFT 4KV 测试后 发现RS485通讯中断 经检查是78L05 芯片损坏了 断电无法恢复 II 问题分析 本次测试的原理图及损坏器件位置如下 红色标记AU1为损坏的稳压管位置 故障复现 测试方法
  • git 配置

    git config global user name username username 是自己的账户名 git config global user email username email com username email com
  • 并发容器(一):普通容器&&同步容器&&并发容器

    前言 之前我们学习过了集合 并发编程 现在我们来学习并发容器 在并发编程中 经常听到Java集合类 同步容器 并发容器 那么他们之间有哪些分类 优劣呢 我们先把这个框架给分清楚了 这样后面学习的时候不会乱 集合容器 大家熟知的集合类Arra
  • 学习docker基础——docker存储驱动、docker开发镜像基础

    目录 一 docker存储驱动及其选择 二 使用overlay2存储驱动 三 迁移docker根目录 四 docker存储的挂载类型 五 开发docker镜像 一 docker存储驱动及其选择 一 概述 1 docker存储驱动与联合文件系
  • 理解Docker(5):Docker 网络

    本系列文章将介绍 Docker的相关知识 1 Docker 安装及基本用法 2 Docker 镜像 3 Docker 容器的隔离性 使用 Linux namespace 隔离容器的运行环境 4 Docker 容器的隔离性 使用 cgroup
  • 【模拟电路】仪表放大器分析

    仪表放大器电路的典型结构如图1所示 它主要由两级差分放大器电路构成 其中 运放A1 A2为同相差分输入方式 同相输入可以大幅度提高电路的输入阻抗 减小电路对微弱输入信号的衰减 差分输入可以使电路只对差模信号放大 而对共模输入信号只起跟随作用
  • 离线安装ceph集群(ceph-13.2.10)

    记录 332 场景 在CentOS 7 9操作系统上 使用ceph的rpm mimic的ceph 13 2 10安装ceph集群 应用ceph对象存储 ceph object store 应用ceph块设备 ceph block devic

随机推荐

  • 【视频解读】Window上安装和使用autogluon V0.7

    1 使用conda安装的python环境 教程使用的是极简版miniconda 由于我们的电脑中安装了anaconda 所以不需要进行进一步安装 python版本为3 9 博客里面有anaconda和python版本的对应关系 注意查看版本
  • conda create -n python 3.6_conda create 怎么创建纯净的 Python3.6 环境?

    刚接触 conda 安装了 Anaconda3 想用 conda create 命令创建一个只含标准模块和几个必需第三方模块 如 pip wheel 的 Python3 6 环境 使用命令 conda create n test pytho
  • 核心思想_[转载]用最浅显的语言解释佛法的核心思想:缘起性空(即般若)

    本文是在 用最浅显的语言解释佛法的核心思想 缘起性空http tieba baidu com p 3074939669 一文基础上 重新修改而成 有兴趣的可以对比 参考原文 从缘起性空 到三界唯心 万法唯识 到涅槃寂静 直到大乘如来藏思想
  • 13天带你了解C++ ---DAY10 C++之vector

    目录 1 string容器 2 构造函数和析构函数的相关操作 3 迭代器 4 容量相关 5 元素访问相关 6 元素遍历相关 7 元素操作相关 8 vector模拟实现 1 string容器 vector容器是C 标准模板库提供的管理任意元素
  • mysql导入csv中文数据乱码问题分析与解决

    摘要 解决csv文件向mysql导入含有中文数据 导入后中文出现乱码问题 结论 在导入含中文字符时注意两个问题 第一 告诉Mysql文件的编码是什么 第二 数据库表中的列编码要设置成支持中文的字符集 导入源数据 SQL代码 LOAD DAT
  • mysql语句

    各种sql语句 一 引言 二 sql基础语句 1 sql新增语句 2 sql查询语句 3 sql修改语句 4 sql删除语句 5 sql其他语句 5 1 sql倒序 正序查询 5 2 sql表行数查询 三 sql较有深度语句 1 sql主从
  • Linux ip地址报错(Temporary failure in name resolution)活检地址检查

    1 项目健康检查报错 报错信息 java net UnknownHostException Temporary failure in name resolution 解决办法 hostname 查看主机名 hostname i 查看本机对应
  • PHPstorm必备插件推荐

    1 env files support 对 env 文件的支持 2 ignore 对 ignore 文件的支持 3 Ideolog 对 log 文件的支持 4 Chinese Simplified Language Pack 中文语言包 官
  • 抖音视频号情感类短视频爆火,背后有什么特点?有什么值得借鉴

    有一些人渐渐不联系了 不是因为淡了远了 而是没有合适的身份陪伴 没有合适的理由联络 没有合适的机会见面 只能放在心里偶尔回忆 经常想念 明明只是一张动图 但却可以让人自动脑补了早期抖音情感博主在线念白的腔调 没错 这些曾经在抖音快手风靡一时
  • 阿里犸良导出的json文件怎么使用

    犸良是什么 犸良作为一站式动效制作平台 通过海量的动效素材以及可视化编辑能力 帮助零基础的用户轻松完成动效制作 支持全平台iOS Android H5 小程序 无论是营销展位 活动页面 空状态还是产品icon 让动效更简单 官网地址 htt
  • pear-admin-flask开源后台模板(适合于毕设)

    Pear Admin Flask 开 箱 即 用 的 Flask 快 速 开 发 平 台 预 览 官 网 群聊 社区 项目简介 Pear Admin Flask 基于 Flask 的后台管理系统 拥抱应用广泛的python语言 通过使用本系
  • C# 如何向String[]字符数组插入数据

    C 如何向String 字符数组插入数据 思路 了解 由于数组是非动态的 不能进行动态的添加 思路 首先将string 字符数组转换成list 第二给list添加数据 最后把list转换成string 数组 String arrs new
  • 怎么上传文件到spark服务器上,从SFTP服务器加载文件到spark RDD

    您可以以下方式使用spark sftp库在你的程序 火花2 x的 Maven的依赖 com springml spark sftp 2 11 1 1 0 SBT依赖 libraryDependencies com springml spar
  • Effective(Modern)C++笔记01

    Effectice C 01 条款01 视C 为一个语言联邦 C 区块 blocks 语句 statements 预处理 preprocessor 内置数据类型 built in data types 数组 arrays 指针 pointe
  • 安装zookeeper集群,开启正常,但status显示./zkServer.sh :line 170:exec :java:not found

    笔者安装过很多次zookeeper集群 但是在一个新的生产环境上遇到了zookeeper的启动异常问题 可以先使用 zkServer sh start foreground 来查看详细报错信息 若发现是 zkServer sh line 1
  • Segment Anything开源项目学习记录

    一 什么是Segment Anything开源项目 Introduction We introduce the Segment Anything SA project a new task model and dataset for ima
  • 滚动页面到指定位置动画展示-Vue自定义命令-IntersectionObserver-animate.css

    最近在做公司官网 web H5 页面滚动显示出来给个小动画 之前了解的浏览器标准解决方案 不向下兼容 是 IntersectionObserver 是一个全局的侦听器 但是每个页面去做一个实例去侦听当前对象也觉得太冗余了吧 并且在vue里面
  • 逻辑分析仪的使用

    目录 逻辑分析仪与示波器的区别 逻辑分析仪 DSView 软件安装与简介 波形采集 波形分析 分析I2S协议 逻辑分析仪与示波器的区别 参考 https www bilibili com video BV1mz4y127jn spm id
  • 详解环境变量

    目录 前言 一 什么是环境变量 二 查看环境变量的方法 三 查看环境变量的内容 四 普通变量VS环境变量 五 导出环境变量 六 常见的环境变量 七 set命令 查看普通变量或环境变量 八 C C 语言中main函数中的参数 1 main函数
  • C#操作Excel总结

    0 导入命名空间 1 2 3 4 using Microsoft Office Core using Microsoft Office Interop Excel