欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#操作Excel相关方法总结

程序员文章站 2022-04-11 09:57:08
0.导入命名空间:using microsoft.office.core;using microsoft.office.interop.excel;using system.io;using syst...

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 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关标签: C# Excel