excel 2003系列

Excel对象

(1)   Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。 
(2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。
(3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。

 Visual C#中调用ExcelCOM组件
  一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。
  1、将Excel的COM组件转换为.NET组件
  在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 9.0 Object Library"(Office2000),然后将其加入到项目的References中即可。Visual C#.NET会自动产生相应的.NET组件文件,以后即可正常使用。
  这个转换形成.NET组件不能单独使用,它不过是以前的COM组件的一个外层包装,在.NET中可以通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。所以它必须与原来的COM组件一起起作用。
  2、Visual C#打开Excel表格
  事实上,在C#中使用一个经转换的COM组件和使用任何一个其它.NET组件完全一样。可以用new关键字创建一个经转换的COM组件,然后再像使用任何一个其它C#对象一样使用这个组件对象。
  在转换后的.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application

,这个类和启动Excel表格有非常重要的关系,在Visual C#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:

Excel.Application excel = new Excel.Application ();//引用Excel对象
excel.Application.Workbooks.Add ( true );//引用Excel工作簿
excel.Visible = true ;//使Excel可视


  但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。
  3、往Excel表格中输入数据
  在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个单元格。通过给"Cell"赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。

Excel.Application excel = new Excel.Application () ;
excel.Application.Workbooks.Add ( true ) ;
excel.Cells[ 1 , 1 ] = "First Row First Column" ;
excel.Cells[ 1 , 2 ] = "First Row Second Column" ;
excel.Cells[ 2 , 1 ] = "Second Row First Column" ;
excel.Cells[ 2 , 2 ] = "Second Row Second Column" ;
excel.Visible = true ;

  4、实例
  下面实例在

C#中连接Oracle数据库(Name),从表(TableName)中读取数据,并写入Excel。

string cnString="Provider=msdaora.1;Data source=Name; ";
cnString=cnString+"user id=UserName;password=Password";
try
{
 OleDbConnection cn=new OleDbConnection (cnString);
 cn.Open ();
 try
 {
  string s="select * from Name.TableName";
  OleDbCommand cmd=new OleDbCommand (s,cn);
  OleDbDataReader dr=cmd.ExecuteReader ();
  Excel.Application xlApp = new Excel.Application();
  if(xlApp==null){MessageBox.Show ("Can't open Excel!");return;}
  xlApp.Application .Workbooks .Add (true);
  int row=2,fieldcount;
  fieldcount=dr.FieldCount ;
  for(int col=0;col<fieldcount;col++) xlApp.Cells [1,col+1]=dr.GetName(col);
  while (dr.Read ())
  {
   for(int col=0;col<fieldcount;col++) 
    xlApp.Cells [row,col+1]=dr.GetValue(col).ToString();
    row++;
  }
  xlApp.Visible =true;
  xlApp=null;
 }
 catch(Exception ex ){MessageBox.Show (ex.Message );}
 finally {cn.Close();}
}
catch(Exception ex){MessageBox.Show (ex.Message );}
}
}

  5、安装一个使用COM组件的.net程序
  如果要将这样的程序安装运行在另一台机器上,那么除了安装运行程序外,还做三件事。

 首先,是安装.NET运行系统。因为任何一个.NET程序都不能离开.NET运行系统去独立运行。
  其次,所调用的COM组件必须要安装在目标机器上。本例中大多数目标机器上都装有Microsoft Office的Excel,一般不会有这个问题。但如果是另一个用户自定义的COM组件,那么这个COM组件在运行.NET程序之前必须先安装好。

     6、Excel属性方法

1、 显示当前窗口:ExcelApp.Visible := True;

2、 更改 Excel 标题栏:ExcelApp.Caption := '标题内容';
3、 添加新工作簿:ExcelApp.WorkBooks.Add;
4、 设置第2个工作表为活动工作表:ExcelApp.WorkSheets[2].Activate;
5、 给单元格赋值:ExcelApp.Cells[1,1].Value := '第一行第一列';
6、 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;
7、 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
8、文字水平居中:Excelid.worksheets[1].Rows[1].HorizontalAlignment := $FFFFEFF4;
  文字垂直居中:Excelid.worksheets[1].Rows[1].VerticalAlignment := $FFFFEFF4;
9、 插入一行或一列:

a. ExcelApp.ActiveSheet.Rows[2].Insert;
b. ExcelApp.ActiveSheet.Columns[1].Insert;
10、 删除一行或一列:

a. ExcelApp.ActiveSheet.Rows[2].Delete;
b. ExcelApp.ActiveSheet.Columns[1].Delete;  
11、合并单元格

a. Microsoft.Office.Interop.Excel.Range range = wsheet.get_Range(A1, F8');

    range.Merge(0);

b. Microsoft.Office.Interop.Excel.Range range = wsheet.get_Range(wsheet.Cells[2, 1], wsheet.Cells[6, 3]);

 range.Merge(0);


12、竖行显示文字:ExcelApp.worksheets[1].Cells.Item[1,1].Orientation:= xlVertical;
13、单元格加边线:ExcelApp.worksheets[1].Range[A1:F8].Borders.LineStyle := 1;
14、在第8行之前插入分页符:ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1;
15、在第4列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;
16、指定边框线宽度:ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左    2-右   3-顶    4-底   5-斜( \ )     6-斜( / )
17、拷贝操作

a.拷贝整个工作表:ExcelApplication1.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴:ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴:ExcelApplication1.ActiveSheet.Range.PasteSpecial;
18、清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells[1,4].ClearContents;
19、工作表保存:

if not ExcelApp.ActiveWorkBook.Saved then
               ExcelApp.ActiveSheet.PrintPreview;
20、工作表另存为:ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );
21、放弃存盘:ExcelApp.ActiveWorkBook.Saved := True;
22、关闭工作簿:ExcelApp.WorkBooks.Close;
23、退出 Excel:ExcelApp.Quit; 

24、设置第一行字体属性:

ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;
ExcelApp.ActiveSheet.Rows[1].Font.size:=10;
25

、进行页面设置:

a.页眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:ExcelApp.ActiveSheet.PageSetup.CenterFooter := '共&N页 第&P页';
c.页眉到顶端边距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;

 i.页面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;
26、打印预览工作表:ExcelApp.ActiveSheet.PrintPreview;
27、打印输出工作表:ExcelApp.ActiveSheet.PrintOut;
28、excel的多单元格合计功能:ExcelApp..Cells[ARow, ACol].Formula 
:= '= SUM($+IntToStr(BeginRow) +:$ + IntToStr(EndRow) +');
注:声明变量ARow, ACol: Integer;
29、打开已经存在的Excel文件: ExcelApplication1.Workbooks.Open (c:\a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,

EmptyParam,EmptyParam,EmptyParam,EmptyParam,0); 

 

 最后,转换后的.NET组件DLL文件要安装在目标机器上。因为.NET组件不需要在Windows ReGIStry中注册,所以最简单的方法是将.NET组件DLL

文件拷贝到运行程序目录下。如果此.NET组件被多个.NET程序共享,可以将其安装在.NET公用组件区中,从而可被任何一个.NET组件使用。只有当一个.NET组件参与了事务处理时,才需要将它注册为一个COM+组件。因为.NET仍然用传统的COM+机制来处理事务的提交、回滚等。

View Code
1. 添加Excel引用:
Using Excel;
2. 建立一个新的Excel表格:
Excel.Application xlapp
= new Excel.Application();
Xlapp.Application.Workbooks.add(
true);
Xlapp.Visible
=true;
3. 给Excel单元格中赋值:
Xlapp.cells[
1,2]=”第一行,第二列单元格”
4. 打开一个Excel
Excel.Workbook
wbook
=xlapp.Workbooks._Open(@"d:\1.xls",Missing.Value,Missing.Value,Missing.Value,Missi
ng.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.
Value,Missing.Value,Missing.Value);
//打开一个文件作为工作簿.
5. 新建一个工作簿
Excel.WorkBook wbook
= xlapp.WorkBooks.Add(Missing.Value);
6. 新建一个工作表
Excel.Worksheet wsheet
= (Excel.Worksheet)wbook.Sheets[1]; //两种赋值方式
Excel.Worksheet wsheet = (Excel.Worksheet)xlapp.ActiveSheet;
7. 添加一个工作表
Worksheet workSheet
= (Worksheet)workBook.Worksheets.Add(System.Type.Missing,
System.Type.Missing, System.Type.Missing, System.Type.Missing)
8. 在单元格中写入数值
Excel.Range rng
= wsheet.get_Range("C6", "D7"); //设定一片区域的值
rng.Value2 = "Hello!";
rng.Interior.ColorIndex
= 6; //设置颜色
9. 读取单元格中的值
Excel.Range rng1
= wsheet.get_Range("c6",Missing.Value); //读取区域的值,并显示
MessageBox.Show(rng1.Value2.ToString());
Excel.Range rng2
=(Excel.Range)wsheet.Cells[6,3]; //读取单元格的值,转化为range后赋值并显示
MessageBox.Show(rng2.Value2.ToString());
10. 保存Excel
wbook.Save();
wbook.SaveAs(
@"D:\a.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value,Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value);
wsheet.SaveAs(
@"d:\3.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
xBook.Close(
true, @"D:\Book1.xlsx", Missing.Value);
11. 关闭Excel程序
wbook
= null; //删除引用
wsheet = null;
xlapp.Quit();
//此步关闭
xlapp = null;
12. 设置单元格格式为文本
range.NumberFormatLocal
= "@"; //设置单元格格式为文本
13. 获取多个单元格区域
range
= (Range)worksheet.get_Range("A1", "E1");
14. 合并单元格
range.Merge(
0);
15. 给单元格赋值
worksheet.Cells[
1, 1] = "Excel单元格赋值";
16. 设置字体大小
range.Font.Size
= 15;
17. 设置字体是否有下划线
range.Font.Underline
=true;
18. 设置字体的种类
range.Font.Name
="黑体";
19. 设置字体在单元格内的对齐方式
range.HorizontalAlignment
=XlHAlign.xlHAlignCenter;
20. 设置单元格的宽度
range.ColumnWidth
=15;
21. 设置单元格的背景色
range.Cells.Interior.Color
=System.Drawing.Color.FromArgb(255,204,153).ToArgb();
22. 设置单元格边框的粗细,颜色,样式
range.Borders.LineStyle
=1;
excelRange.Borders.get_Item(XlBordersIndex.xlEdgeBottom).Weight
=
Excel.XlBorderWeight.xlMedium;
excelRange.Borders.get_Item(XlBordersIndex.xlEdgeBottom).ColorIndex
=3;
excelRange.Borders.get_Item(XlBordersIndex.xlEdgeTop).LineStyle
=
Excel.XlLineStyle.xlContinuous;
23. 给单元格加边框
range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorI
ndexAutomatic,System.Drawing.Color.Black.ToArgb());
24. 设置单元格上边框为无边框
range.Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop).LineStyl
e
= Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone;
25. 自动调整列宽
range.EntireColumn.AutoFit();
26. 文本水平居中方式
Range.HorizontalAlignment
= xlCenter;
27. 文本垂直居中方式
Range.VerticalAlignment
= xlCenter
28. 文本自动换行
Range.WrapText
=true;
29. 填充颜色为淡紫色
Range.Interior.ColorIndex
=39;
30. 设置字体颜色
Range.Interior.ColorIndex
=39;
31. 保存Excel是,不弹出是否保存的窗口直接进行保存.
xlsApp.DisplayAlerts
=false;
32. 设置行高
((Excel.Range)wSheet.Rows[
"1:1", System.Type.Missing]).RowHeight = 100;
//RowHeight "1:1"表示第一行, "1:2"表示,第一行和第二行

33. 设置列宽
((Excel.Range)wSheet.Columns[
"A:B", System.Type.Missing]).ColumnWidth = 10;
//ColumnWidth "A:B"表示第一列和第二列, "A:A"表示第一列
34. 常用颜色对照表
public enum ColorIndex
{
无色
= -4142, 自动 = -4105, 黑色 = 1, 褐色 = 53, 橄榄 = 52, 深绿 = 51, 深
= 49, 深蓝 = 11, 靛蓝 = 55, 灰色80 = 56, 深红 = 9, 橙色 = 46, 深黄 = 12, 绿
= 10, 青色 = 14, 蓝色 = 5, 蓝灰 = 47, 灰色 50 = 16, 红色 = 3, 浅橙色 =
45, 酸橙色 = 43, 海绿 = 50, 水绿色 = 42, 浅蓝 = 41, 紫罗兰 = 13, 灰色40 =
48, 粉红 = 7, 金色 = 44, 黄色 = 6, 鲜绿 = 4, 青绿 = 8, 天蓝 = 33, 梅红 =
54, 灰色 25 = 15, 玫瑰红 = 38, 茶色 = 40, 浅黄 = 36, 浅绿 = 35, 浅青绿 =
34, 淡蓝 = 37, 淡紫 = 39, 白色 = 2
}
35. range的值读取方式:
rng.Value2
= "Hello!";
string str = rng.Value2;
string str2 = rng.Text;
1     /// <summary>
2     /// 讀取excel數據和插入公式
3     /// </summary>
4     /// <param name="sender"></param>
5     /// <param name="e"></param>
6     protected void Button2_Click(object sender, EventArgs e)
7     {
8         DateTime t1 = DateTime.Now;
9         Response.Write("<br>start time:" + t1.ToString());
10         Excel.Application excelkk = new Excel.Application();
11        
12         excelkk.Workbooks.Add(true);
13         int row = 2;
14         DataTable myTable = ds.Tables["[Sheet1$]"];
15         for (int i = 0; i < myTable.Columns.Count; i++)
16         {
17             excelkk.Cells[1, 1 + i] = myTable.Columns[i].ColumnName.ToString();
18         }
19         for (int i = 0; i < myTable.Rows.Count; i++)
20         {
21             for (int j = 0; j < myTable.Columns.Count; j++)
22             {
23                 excelkk.Cells[row, j + 1] = myTable.Rows[i][j].ToString();
24             }
25            
26             row++;
27         }
28
29      
30        //取得特定單元格的值
31         excelkk.Visible = true;
32         this.TextBoxChange.Text = excelkk.get_Range("A2", Type.Missing).Text.ToString();
33         //表的單元格合并
34         Excel.Range range1 = excelkk.get_Range("A2", "D4");
35         range1.Merge(Type.Missing);
36        
37        
38        
39        
40         //想表格中插入求和的值
41         Excel.Range range2 = excelkk.get_Range("B25", Type.Missing);
42         range2.Formula = "=SUM(B2:B24)";
43         range2.Calculate();
44
45         //進行宏的循環應用與單元格的刪除和添加,多個單元格默認宏自動操作。
46         Excel.Range range3 = excelkk.get_Range("B25","E25");
47         range2.AutoFill(range3,Excel.XlAutoFillType.xlFillDefault);
48         //刪除表的指定行數操作
49         Excel.Range range7 = null;
50         range7 = excelkk.get_Range(excelkk.Cells[2, 2], excelkk.Cells[4, 4]);
51         range7.Select();
52         range7.EntireRow.Delete(Excel.XlDirection.xlUp);
53
54         //獲取最大用過的行數
55         Excel.Worksheet wsheet1 = (Excel.Worksheet)excelkk.Worksheets.get_Item(1);
56         int n =wsheet1.UsedRange.Cells.Columns.Count;
57         Response.Write(n.ToString() + "<br>");
58         //MessageBox.Show(n.ToString());
59         n = wsheet1.UsedRange.Cells.Rows.Count;
60         Response.Write(n.ToString() + "<br>");
61         //MessageBox.Show(n.ToString());
62         //數據的複製
63         Excel.Range range4 = excelkk.get_Range("A2", "B25");
64         Excel.Range range5 = excelkk.get_Range("E3", "F25");
65         //range4.get_Offset(1,4).Select();
66         range4.Copy(range5);
67         //停用警告信息
68         excelkk.DisplayAlerts = false;
69         GC.Collect();    
70
71     }
72
73
74 單個sheet里求和:
75 Excel.Range range2 = excelkk.get_Range("B25", Type.Missing);
76         range2.Formula = "=SUM(B2:B24)";
77         range2.Calculate();
78
79 跨sheet求和:
80 Excel.Worksheet wsheet1 = (Excel.Worksheet)excelSql.Worksheets.get_Item(1);
81         Excel.Range range3 =wsheet1.get_Range("A23", Type.Missing);
82         range3.Formula = "=Sheet3!B8+Sheet3!B12";
83         range3.Calculate();
84
 
导入的域名空间:
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 取得: _Worksheet _wsh = (_Worksheet)shs.get_Item(i)//i是要取得的sheet的index
2.2 删除: app.DisplayAlerts = false;//删除sheet必须的设置
_wsh.Delete();
2.3 添加: app.Worksheets.Add(a,b,c,d);
//a(before),b(after):确定添加位置;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.Cells[2, 1]).HorizontalAlignment = XlVAlign.xlVAlignCenter;
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();
app.DisplayAlerts = false;//屏蔽掉Alert,默认确定粘贴 
test.Parse(Missing.Value, Missing.Value);
注: Type.Missing和Missing.Value,在excel的操作中被视为某些参数的默认值,他们起到的作用很多时候是形式补足参数
7.excel文件的保存,及后续处理
7.1 文件保存
app.DisplayAlerts = false;//屏蔽掉系统跳出的Alert
app.AlertBeforeOverwriting = false;
//保存到指定目录
_wbk.SaveAs(filePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value);
注: 这个地方只能采用该方法保存,不然在指定路径下保存文件外,在我的文档中也会生成一个对应的副本
7.2 后续处理:退出和释放
//_wbk.Close(null, null, null);
//wbks.Close();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);//释放掉多余的excel进程
app = null;
说明: 在application关闭的过程中,通常我们有两种方案:
#直接退出app
#先关闭workbook,然后关闭workbooks,最后在退出app
鉴于这两种方式,或许本质上是一样的(这点需要证明),但是依据我们软件开发的原则:哪里需要哪里声明,哪里结束哪里释放回收。
本人认为,既然在直接退出app的时候,我们不清楚workbook和workbooks具体在什么时间关闭,不如在结束的时候直接手动关闭,这样做可以做到资源的快速直接回收;
所以,我建议采用先关闭workbook,然后关闭workbooks,最后在退出app。
8.关于单元格设置域和取得域里需要的数据
8.1 若单元格已经设置为下拉框
((Range)_wsh.Cells[2, 1]).Validation.Modify(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, Type.Missing, "1,2,3", Type.Missing);
//这里的“1,2,3”设置的就是下拉框的值
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;
10.excel下载接口参数
bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
类型 功能 获取方式
# HttpRequest 获取当前页的 HttpRequest 对象 Page.Request
# HttpResponse 获取当前页的 HttpResponse 对象 Page.Response
# string 保存的文件名 设置
# string 下载的文件路径 设置
# long 下载速度 设置
posted @ 2011-03-08 15:22  ant520  阅读(817)  评论(0编辑  收藏  举报