c操作excel总结.docx
《c操作excel总结.docx》由会员分享,可在线阅读,更多相关《c操作excel总结.docx(23页珍藏版)》请在冰豆网上搜索。
c操作excel总结
C#操作Excel总结
Excel基本操作
查看Excel中宏的方法如下:
ALT+F11
0.导入命名空间:
viewsource
print?
1
usingMicrosoft.Office.Core;
2
usingMicrosoft.Office.Interop.Excel;
3
usingSystem.IO;
4
usingSystem.Reflection;
1.如何打开已有excel文档,或者创建一个新的excel文档
viewsource
print?
1
Applicationapp=newApplication();
2
Workbookswbks=app.Workbooks;
3
_Workbook_wbk=wbks.Add(xxx);
若打开已有excel,把“xxx”替换成该excel的文件路径;
注:
若新建一个excel文档,“xxx”替换成true即可;不过这里新建的excel文档默认只有一个sheet。
2.取得、删除和添加sheet
viewsource
print?
1
Sheetsshs=_wbk.Sheets;
2.1取得:
viewsource
print?
1
//i是要取得的sheet的index
2
_Worksheet_wsh=(_Worksheet)shs.get_Item(i)
2.2删除:
viewsource
print?
1
//删除sheet必须的设置
2
app.DisplayAlerts=false;
3
_wsh.Delete();
2.3添加:
viewsource
print?
1
//a(before),b(after):
确定添加位置;c:
数目;d:
类型
2
app.Worksheets.Add(a,b,c,d);
2.4sheet的重命名
viewsource
print?
1
_wsh.Name="xxx";
3.删除行和列
3.1删除行:
viewsource
print?
1
((Range)_wsh.Rows[3,Missing.Value]).Delete(XlDeleteShiftDirection.xlShiftUp);
3.2删除列:
viewsource
print?
1
_wsh.get_Range(
2
_wsh.Cells[1,2],
3
_wsh.Cells[_wsh.Rows.Count,2]).Delete(XlDeleteShiftDirection.xlShiftToLeft
4
);
4.添加行和列
4.1添加行:
viewsource
print?
1
((Range)_wsh.Rows[11,Missing.Value])
2
.Insert(Missing.Value,XlInsertFormatOrigin.xlFormatFromLeftOrAbove);
4.2添加列:
viewsource
print?
1
_wsh.get_Range(
2
_wsh.Cells[1,1],_wsh.Cells[_wsh.Rows.Count,1])
3
.Insert(Missing.Value,XlInsertShiftDirection.xlShiftToRight);
5.单元格操作
5.1单元格的取得
viewsource
print?
1
//获得单元格对象
2
_wsh.Cells[row,cell]
5.2设置公式
viewsource
print?
1
//在对应的单元格输入公式即可
2
_wsh.Cells[row,cell]="=Sum(A1/B1)";
5.3合并单元格
viewsource
print?
1
((Range)_wsh.Rows[1,Missing.Value]).Merge(Missing.Value);
5.4设置行高和列宽
viewsource
print?
1
((Range)_wsh.Rows[3,Missing.Value]).RowHeight=5;
2
((Range)_wsh.Rows[3,Missing.Value]).ColumnWidth=5;
5.5设置单元格颜色颜色共有56中,详情请参照附录的[颜色对照表]
viewsource
print?
1
((Range)_wsh.Rows[1,Missing.Value]).Interior.ColorIndex=3;
5.6设置字号
viewsource
print?
1
((Range)_wsh.Cells[1,"B"]).Font.Size=8;
5.7是否设置粗体
viewsource
print?
1
((Range)_wsh.Rows[1,Missing.Value]).Font.Bold=false;
5.8单元格/区域、水平垂直居中
viewsource
print?
1
((Range)_wsh.Cells[2,1]).HorizontalAlignment=XlVAlign.xlVAlignCenter;
5.9设置区域边框
viewsource
print?
1
((Range)_wsh.Cells[3,3]).Borders.LineStyle=3;
5.10设置边框的上、下、左、右线条
viewsource
print?
01
//左
02
_wsh.get_Range(
03
_wsh.Cells[2,1],_wsh.Cells[2,2])
04
.Borders[XlBordersIndex.xlEdgeLeft].Weight=XlBorderWeight.xlThick;//
05
06
//右
07
_wsh.get_Range(
08
_wsh.Cells[2,1],_wsh.Cells[2,2])
09
.Borders[XlBordersIndex.xlEdgeRight].Weight=XlBorderWeight.xlThick;//
10
11
//上
12
_wsh.get_Range(
13
_wsh.Cells[2,1],_wsh.Cells[2,2])
14
.Borders[XlBordersIndex.xlEdgeTop].Weight=XlBorderWeight.xlThick;//下
15
16
//下
17
_wsh.get_Range(
18
_wsh.Cells[2,1],_wsh.Cells[2,2])
19
.Borders[XlBordersIndex.xlEdgeBottom].Weight=XlBorderWeight.xlThick;
自动换行
range.WrapText
6.指定区域的复制
viewsource
print?
01
_Worksheet_wsh=(_Worksheet)shs.get_Item
(1);//复制选中区域的内容
02
03
Rangerange=_wsh.get_Range(_wsh.Cells[7,1],_wsh.Cells[10,_wsh.Columns.Count]);
04
05
range.Select();
06
range.Copy(Type.Missing);
07
08
//选中粘贴的起始位置
09
Rangetest=((Range)_wsh.Cells[11,1]);
10
test.Select();
11
12
//屏蔽掉Alert,默认确定粘贴
13
app.DisplayAlerts=false;
14
test.Parse(Missing.Value,Missing.Value);
注:
Type.Missing和Missing.Value,在excel的操作中被视为某些参数的默认值,他们起到的作用很多时候是形式补足参数
7.excel文件的保存,及后续处理
7.1文件保存
viewsource
print?
1
//屏蔽掉系统跳出的Alert
2
app.AlertBeforeOverwriting=false;
3
4
//保存到指定目录
5
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后续处理:
退出和释放
viewsource
print?
1
//_wbk.Close(null,null,null);
2
//wbks.Close();
3
app.Quit();
4
5
//释放掉多余的excel进程
6
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
7
app=null;
说明:
在application关闭的过程中,通常我们有两种方案:
#直接退出app
#先关闭workbook,然后关闭workbooks,最后在退出app
鉴于这两种方式,或许本质上是一样的(这点需要证明),但是依据我们软件开发的原则:
哪里需要哪里声明,哪里结束哪里释放回收。
既然在直接退出app的时候,我们不清楚workbook和workbooks具体在什么时间关闭,不如在结束的时候直接手动关闭,这样做可以做到资源的快速直接回收;
所以,建议采用先关闭workbook,然后关闭workbooks,最后在退出app。
8.关于单元格设置域和取得域里需要的数据
8.1若单元格已经设置为下拉框
viewsource
print?
1
//这里的“1,2,3”设置的就是下拉框的值
2
((Range)_wsh.Cells[2,1])
3
.Validation.Modify(XlDVType.xlValidateList,XlDVAlertStyle.xlValidAlertStop,Type.Missing,"1,2,3",Type.Missing);
8.2若单元格还没有设置为下拉框的形式
viewsource
print?
1
((Range)_wsh.Cells[2,1])
2
.Validation.Add(XlDVType.xlValidateList,XlDVAlertStyle.xlValidAlertStop,Type.Missing,"1,2,3",Type.Missing);
8.3取得下拉框域的值
viewsource
print?
1
stringstrValue=((Range)_wsh.Cells[2,1]).Validation.Formula1;
注:
若在excel模板中通过有效性设定了下拉框的值,strValue得到的将会是excel里的公式,需将其转换,取得strValue后,可以根据其索引得到你需要的数值;
9.隐藏行和隐藏列
9.1隐藏行
viewsource
print?
1
_wsh.get_Range(_wsh.Cells[19,1],_wsh.Cells[22,1]).EntireRow.Hidden=true;
9.2隐藏列
viewsource
print?
1
_wsh.get_Range(_wsh.Cells[1,1],_wsh.Cells[_wsh.Rows.Count,1])
2
.EntireColumn.Hidden=true;
10.锁定指定区域
Range.Locked
11.Excel中插入图片
1.usingSystem;
2.usingSystem.Collections.Generic;
3.usingSystem.Text;
4.//usingExcel=Microsoft.Office.Interop.Excel;
5.usingExcel;
6.usingSystem.Windows.Forms;
7.
8.
9.namespaceExcelReport
10.{
11.classInsertPicToExcel
12.{
13./**////
14.///打开没有模板的操作。
15.///
16.publicvoidOpen()
17.{
18.this.Open(String.Empty);
19.}
20.
21./**////
22.///功能:
实现Excel应用程序的打开
23.///
24.///模板文件物理路径
25.publicvoidOpen(stringTemplateFilePath)
26.{
27.//打开对象
28.m_objExcel=newExcel.Application();
29.m_objExcel.Visible=false;
30.m_objExcel.DisplayAlerts=false;
31.
32.if(m_objExcel.Version!
="11.0")
33.{
34.MessageBox.Show("您的Excel版本不是11.0(Office2003),操作可能会出现问题。
");
35.m_objExcel.Quit();
36.return;
37.}
38.
39.m_objBooks=(Excel.Workbooks)m_objExcel.Workbooks;
40.if(TemplateFilePath.Equals(String.Empty))
41.{
42.m_objBook=(Excel._Workbook)(m_objBooks.Add(m_objOpt));
43.}
44.else
45.{
46.m_objBook=m_objBooks.Open(TemplateFilePath,m_objOpt,m_objOpt,m_objOpt,m_objOpt,
47.m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt);
48.}
49.m_objSheets=(Excel.Sheets)m_objBook.Worksheets;
50.m_objSheet=(Excel._Worksheet)(m_objSheets.get_Item
(1));
51.m_objExcel.WorkbookBeforeClose+=newExcel.AppEvents_WorkbookBeforeCloseEventHandler(m_objExcel_WorkbookBeforeClose);
52.}
53.
54.privatevoidm_objExcel_WorkbookBeforeClose(Excel.Workbookm_objBooks,refbool_Cancel)
55.{
56.MessageBox.Show("保存完毕!
");
57.}
58.
59./**////
60.///将图片插入到指定的单元格位置。
61.///注意:
图片必须是绝对物理路径
62.///
63.///单元格名称,例如:
B4
64.///要插入图片的绝对路径。
65.publicvoidInsertPicture(stringRangeName,stringPicturePath)
66.{
67.m_objRange=m_objSheet.get_Range(RangeName,m_objOpt);
68.m_objRange.Select();
69.Excel.Picturespics=(Excel.Pictures)m_objSheet.Pictures(m_objOpt);
70.pics.Insert(PicturePath,m_objOpt);
71.}
72.
73./**////
74.///将图片插入到指定的单元格位置,并设置图片的宽度和高度。
75.///注意:
图片必须是绝对物理路径
76.///
77.///单元格名称,例如:
B4
78.///要插入图片的绝对路径。
79.///插入后,图片在Excel中显示的宽度。
80.///插入后,图片在Excel中显示的高度。
81.publicvoidInsertPicture(stringRangeName,stringPicturePath,floatPictuteWidth,floatPictureHeight)
82.{
83.m_objRange=m_objSheet.get_Range(RangeName,m_objOpt);
84.m_objRange.Select();
85.floatPicLeft,PicTop;
86.PicLeft=Convert.ToSingle(m_objRange.Left);
87.PicTop=Convert.ToSingle(m_objRange.Top);
88.//参数含义:
89.//图片路径
90.//是否链接到文件
91.//图片插入时是否随文档一起保存
92.//图片在文档中的坐标位置(单位:
points)
93.//图片显示的宽度和高度(单位:
points)
94.//参数详细信息参见:
95.m_objSheet.Shapes.AddPicture(PicturePath,Microsoft.Office.Core.MsoTriState.msoFalse,
96.Microsoft.Office.Core.MsoTriState.msoTrue,PicLeft,PicTop,PictuteWidth,PictureHeight);
97.}
98.
99./**////
100.///将Excel文件保存到指定的目录,目录必须事先存在,文件名称不一定要存在。
101.///
102.///要保存成的文件的全路径。
103.publicvoidSaveFile(stringOutputFilePath)
104.{
105.m_objBook.SaveAs(OutputFilePath,m_objOpt,m_objOpt,
106.m_objOpt,m_objOpt,m_objOpt,Excel.XlSaveAsAccessMode.xlNoChange,
107.m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt);
108.
109.this.Close();
110.}
111./**////
112.///关闭应用程序
113.///
114.privatevoidClose()
115.{
116.m_objBook.Close(false,m_objOpt,m_objOpt);
117.m_objExcel.Quit();
118.}
119.
120./**///