C#操作Excel相关方法总结

0.导入命名空间:

using Microsoft.Office.Core;
using Microsoft.Office.Interop.Excel;
using System.IO;
using System.Reflection;

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

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

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

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

2.取得、删除和添加sheet

Sheets shs = _wbk.Sheets;

2.1取得:

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

2.2 删除:

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

2.3 添加:

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

2.4 sheet的重命名

_wsh.Name = "xxx";

3.删除行和列

3.1 删除行:

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

3.2 删除列:

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

4.添加行和列

4.1 添加行:

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

4.2 添加列:

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

5.单元格操作

5.1 单元格的取得

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

5.2 设置公式

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

5.3 合并单元格

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

5.4 设置行高和列宽

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

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

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

5.6 设置字号

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

5.7 是否设置粗体

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

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

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

5.9 设置区域边框

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

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

//左
_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.指定区域的复制

_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 文件保存

//屏蔽掉系统跳出的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 后续处理:退出和释放

//_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”设置的就是下拉框的值
((Range)_wsh.Cells[2, 1])
.Validation.Modify(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, Type.Missing, "1,2,3", Type.Missing);

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

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

8.3 取得下拉框域的值

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

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

9.隐藏行和隐藏列

9.1 隐藏行

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

9.2 隐藏列

_wsh.get_Range(_wsh.Cells[1, 1], _wsh.Cells[_wsh.Rows.Count, 1])
.EntireColumn.Hidden = true;

到此这篇关于C#操作Excel相关方法总结 的文章就介绍到这了,更多相关C#操作Excel 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#读取Excel到DataTable的方法示例

    前提 在Windows下进行数据处理的时候最常见的情况莫过于读取Microsoft的Excel文件了,Excel的普及率惊人,是事实上的标准.以前的开发中我采用调用第三方类库 NPOI的方式来处理Excel.这个方式有两个缺点: 需要依赖第三方类库NPOI NPOI支持几乎全功能的Office条件,缺点就是复杂度也高. 如果只是简单的导入数据,完全可以有更加简单的方案,方案的限制条件为: 只支持Windows平台 只读取Excel文件 支持xls和xlsx文件格式 依赖 还是有依赖的 2007

  • C#数据导入到EXCEL的方法

    c#做公司的应用级开发时,导出数据这个是经常要做的,公司使用的是一个叫NPOI的组件.具体是什么我就不很清楚,反正这样用就是了. 具体的dll是一个叫:NPOI.HSSF.dll,引入这个dll,这个dll提供HSSFWorkbook类 HSSFSheet类HSSFRow类: 具体实现方式直接看代码吧: public static Stream DataSetToExcel(DataSet _SourceDt,string _sheetName) { HSSFWorkbook workbook

  • C#导出数据到excel如何提升性能

    一,要提升性能,我们先要知道耗时的地方在哪里 1,数据库查询, 2,把数据组合成新集合循环嵌套太多 二,那我们怎么优化呢? 一,数据库查询, 1>,数据库查询:如果数据量小,我们可以用临时datatable,连表查询,,可是如果是连表都是千万级上亿数据,就不建议用连表 那这个时候该怎么办呢? 2>这个时候我们可以选择先单表查询,然后再循环体查询自己所要的其他关联数据,这个时候我们需要注意的点是什么? 3>减少数据库查询!!!!!!!!!这个是重点,那怎么减少呢?正常逻辑如下代码,可是数据

  • 详解C#设置Excel数据自适应行高、列宽的2种情况

    Excel表格中,由于各种数据的复杂性,可能存在单元格中的数据字号大小.数据内容长度不一而出现,列宽过宽.过窄或者行高过大.过小的问题.常见的解决方法是调整行高.列宽.在Microsoft Excel中,在单元格格式设置中可手动设置自适应行高或自适应列宽,但通过代码,我们可以通过方法AutoFitColumns()或者AutoFitRows()来设置指定数据范围或整个工作表的自适应行高.列宽.这里设置自适应分以下2种情况来进行: 1. 固定数据,设置行高.列宽自适应数据 2. 固定行高.列宽,设

  • C#获取Excel第一列的实例方法

    演示C#读取Excel文档,以及展示读取结果. 打开Vistual Studio开发工具软件,新建一个读取Excel的demo项目,包括一个可视窗体,项目工程结构如下图所示. 打开工程->引用->右键->添加引用,导入读取excel文件必要引用,主要是NPOI的一些组件.导入成功,如下图所示. 创建一个简单的可视窗体,窗体上控件包括:打开文件.读取文件按钮,显示读取结果的文本控件等. 主窗体代码中,操作读取文件时,调用类ExcelClass中的readExcelData_NPOI方法.如

  • C#读写EXCEL单元格的问题实现

    最近, 我在用C#开发一个EXCEL Add-In的时候,发现了一些害人不浅的坑,特来总结列举如下: 这里我读写EXCEL引用的是using Excel = Microsoft.Office.Interop.Excel; 问题一.如何判断一个单元格去除首尾空格后是不是空的 在获取单元格内的文本内容进行判断时,总觉得最好用Text属性,少用或不用Value和Value2属性 if (cur_sht.Range["A1"].Text.Trim() == "") {} T

  • C# 导出Excel的6种简单方法实现

    作者 | Johnson Manohar 译者 | 谭开朗,责编 | 黄浩然 出品 | CSDN(ID:CSDNnews) Syncfusion Excel (XlsIO) 库是一个 .Net Excel 库,它支持用户用 C# 和 VB.NET 以一个非常简易的方式,将各种数据源(如数据表,数组,对象集合,数据库,CSV / TSV,和微软网格控件等)数据导出到 Excel . 将数据导出到 Excel 可以以更容易理解的方式可视化数据.该特性有助于生成财务报告.银行报表和发票,同时还支持筛选

  • 详解C#读写Excel的几种方法

    1 使用Office自带的库 前提是本机须安装office才能运行,且不同的office版本之间可能会有兼容问题,从Nuget下载 Microsoft.Office.Interop.Excel 读写代码如下: using Microsoft.Office.Interop.Excel; using Excel = Microsoft.Office.Interop.Excel; private void btn_Office_Click(object sender, EventArgs e) { s

  • C#删除Excel中的图片实例代码

    dll文件获取及引用: 方法1:通过官网下载dll文件包,并解压.解压文件后,将bin文件夹下的Spire.Xls.dll文件引用到C#程序. 方法2:通过Nuget网站获取dll. using Spire.Xls; namespace RemoveImg { class Program { static void Main(string[] args) { //加载Excel文档 Workbook workbook = new Workbook(); workbook.LoadFromFile

  • C#操作Excel相关方法总结

    0.导入命名空间: using Microsoft.Office.Core; using Microsoft.Office.Interop.Excel; using System.IO; using System.Reflection; 1.如何打开已有excel文档,或者创建一个新的excel文档 Application app = new Application(); Workbooks wbks = app.Workbooks; _Workbook _wbk = wbks.Add(xxx)

  • VBS操作Excel常见方法

    dim oExcel,oWb,oSheet Set oExcel= CreateObject("Excel.Application") Set oWb = oExcel.Workbooks.Open("E:\其他\新装电话表.xls") Set oSheet = oWb.Sheets("Sheet1") MsgBox oSheet.Range("B2").Value '#提取单元格B2内容 '..... 3.如果是XP系统,可

  • python中使用xlrd、xlwt操作excel表格详解

    最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究"(用此一词让我觉得颇有成就感)之后,基本解决了日常所需.主要记录使用过程的常见问题及解决. python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库.可从这里下载https://pypi.python.org/pypi.下面分别记录python

  • 利用java操作Excel文件的方法

    很久以来都想研究一下利用java操作Excel的方法,今天没事,就稍微了解了一下,特总结一下.利用java操作Excel,有个开源的东东-jxl.jar,可以到http://sourceforge.net/projects/jexcelapi/files/下载. 一.读取Excel文件内容 复制代码 代码如下: /** *//**读取Excel文件的内容     * @param file  待读取的文件     * @return     */    public static String

  • JavaWeb使用POI操作Excel文件实例

    1.为项目添加POI POI官网链接 点进去之后下载(上边的是编译好的类,下边的是源代码) 解压文件夹,把下面三个文件复制到WebComtent>WEB-INF>lib文件夹下 再把这三个文件复制到Tomcat的lib文件夹下,否则Tomcat会因为找不到类而报错(这个地方郁闷了一上午) 读取".xls"格式使用  import org.apache.poi.hssf.usermodel.*;包的内容,例如:HSSFWorkbook 读取".xlsx"格

  • java操作excel的方法

    本文实例讲述了java操作excel的方法.分享给大家供大家参考.具体如下: WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\output.xls")); WritableSheet sheet = workbook.createSheet("项目简报", 0); //样式 WritableFont sonti18font = new WritableFont(WritableFon

  • java 中JXL操作Excel实例详解

    JXL操作Excel 前言: jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文支持非常好,API是纯Java的, 并不 依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件. 另外需要说明的是,这套API对图形和图表的支持很有限,而且 仅仅识别PNG格式. 使用如下: 搭建环境 将下载后的文件解包,得到jxl.jar

  • 使用Python操作excel文件的实例代码

    使用的类库 pip install openpyxl 操作实现 •工作簿操作 # coding: utf-8 from openpyxl import Workbook # 创建一个excel工作簿 wb = Workbook() # 打开一个工作簿 wb = load_workbook('test.xlsx') # 保存工作簿到文件 wb.save('save.xlsx') •工作表操作 # 获得当前的工作表对象 ws = wb.active # 通过工作表名称得到工作表对象 ws = wb.

  • ASP.NET操作EXCEL的总结篇

    公元19XX年前,关于EXCEL的操作就如滔滔江水,连绵不绝,真正操作EXCEL我也是从去年下半年开始的,有些比较复杂的年度报表之类的,做起来也有点费力,不过还是都能画出来了,关于EXCEL的报表导出,考虑到导出耗时的问题我主要采用AJAX来做的,分别捕捉几个起止状态,给客户端提示3个状态:正在检索数据...--->准备导出数据...(只是从数据库成功取出,还没有读写excel文件)-->正在读写文件-->导出数据成功,当然如果哪一过程出错,都有对应的提示,只所以想到写这篇文章,主要是因

  • C#操作Excel数据增删改查示例

    C#操作Excel数据增删改查. 首先创建ExcelDB.xlsx文件,并添加两张工作表. 工作表1: UserInfo表,字段:UserId.UserName.Age.Address.CreateTime. 工作表2: Order表,字段:OrderNo.ProductName.Quantity.Money.SaleDate. 1.创建ExcelHelper.cs类,Excel文件处理类 复制代码 代码如下: using System; using System.Collections.Gen

随机推荐