asp.net(C#)操作excel(上路篇)

时间:2021-10-09 11:56:45
1.作业环境 

开发环境:vs2005 /vs2008
数据库:sql2005

excel:2003
首先
vs加入com組件(当然也可以加入.net下的excel组件):
asp.net(C#)操作excel(上路篇)
之后vs引用子目录会多出下面三个dll:
asp.net(C#)操作excel(上路篇)
 简单操作流程如下:
复制代码代码如下:

using Excel; 

// from bill example 
public void writeExcelAdvance(String outputFile) 

string[,] myData = 

{ "车牌号", "类型", "品 牌", "型 号", "颜 色", "附加费证号", "车架号" }, 
{ "浙KA3676", "危险品", "货车", "铁风SZG9220YY", "白", "1110708900", "022836" }, 
{ "浙KA4109", "危险品", "货车", "解放CA4110P1K2", "白", "223132", "010898" }, 
{ "浙KA0001A", "危险品", "货车", "南明LSY9190WS", "白", "1110205458", "0474636" }, 
{ "浙KA0493", "上普货", "货车", "解放LSY9190WS", "白", "1110255971", "0094327" }, 
{ "浙KA1045", "普货", "货车", "解放LSY9171WCD", "蓝", "1110391226", "0516003" }, 
{ "浙KA1313", "普货", "货车", "解放9190WCD", "蓝", "1110315027", "0538701" }, 
{ "浙KA1322", "普货", "货车", "解放LSY9190WS", "蓝", "24323332", "0538716" }, 
{ "浙KA1575", "普货", "货车", "解放LSY9181WCD", "蓝", "1110314149", "0113018" }, 
{ "浙KA1925", "普货", "货车", "解放LSY9220WCD", "蓝", "1110390626", "00268729" }, 
{ "浙KA2258", "普货", "货车", "解放LSY9220WSP", "蓝", "111048152", "00320" } 
}; 
//引用Excel Application类别 
Application myExcel = null; 
//引用活页簿类别 
Workbook myBook = null; 
//引用工作表类别 
Worksheet mySheet = null; 
//引用Range类别 
Range myRange = null; 
//开启一个新的应用程式 
myExcel = new Microsoft.Office.Interop.Excel.Application(); 
//打开一个已经存在的excel excel2003和2007版打开参数不一样,具体可以上网上去查: 
//excelSql.Workbooks.Open(@"C:\08.xls"(已经存在的excel路径), Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
//Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing,Type.Missing); 
//加入新的活页簿 
myExcel.Workbooks.Add(true); 
//停用警告讯息 
myExcel.DisplayAlerts = false; 
//让Excel文件可见 
myExcel.Visible = true; 
//引用第一个活页簿 
myBook = myExcel.Workbooks[1]; 
//设定活页簿焦点 
myBook.Activate(); 
//引用第一个工作表 
mySheet = (Worksheet)myBook.Worksheets[1]; 
//命名工作表的名称为 "Array" 
mySheet.Name = "Cells"; 
//设工作表焦点 
mySheet.Activate(); 
int a = 0; 
int UpBound1 = myData.GetUpperBound(0); 
//二维阵列数上限 
int UpBound2 = myData.GetUpperBound(1); 
//二维阵列数上限 
//写入报表名称 
myExcel.Cells[1, 4] = "普通报表"; 
//以下的Select方法可省略,加速Excel运行,但VBA有些功能必须要用到Select方法。 
//以下的Select方法可省略,加速Excel运行,但VBA有些功能必须要用到Select方法。 
//逐行写入数据 
for (int i = 0; i < UpBound1; i++) 

for (int j = 0; j < UpBound2; j++) 

//以单引号开头,表示该单元格为纯文字 
a++; 
//用offset写入阵列资料 
myRange = mySheet.get_Range("A2", Type.Missing); 
myRange.get_Offset(i, j).Select(); 
myRange.Value2 = "'" + myData[i, j]; 
//用Cells写入阵列资料 
myRange.get_Range(myExcel.Cells[2 + i, 1 + j], myExcel.Cells[2 + i, 1 + j]).Select(); 
myExcel.Cells[2 + i, 1 + j] = "'" + myData[i, j]; 


//加入新的工作表在第1张工作表之后 
myBook.Sheets.Add(Type.Missing, myBook.Worksheets[1], 1, Type.Missing); 
//引用第2个工作表 
mySheet = (Worksheet)myBook.Worksheets[2]; 
//命名工作表的名称为 "Array" 
mySheet.Name = "Array"; 
//Console.WriteLine(mySheet.Name); 
//写入报表名称 
myExcel.Cells[1, 4] = "普通报表"; 
//设定范围 
myRange = (Range)mySheet.get_Range(myExcel.Cells[2, 1], myExcel.Cells[UpBound1 + 1, UpBound2 + 1]); 
myRange.Select(); 
//用阵列一次写入资料 
myRange.Value2 = "'" + myData; 
//设定储存路径 
//string PathFile = Directory.GetCurrentDirectory() + @"\button4.xls"; 
//另存活页簿 
myBook.SaveAs(outputFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing 
, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
//关闭活页簿 
myBook.Close(false, Type.Missing, Type.Missing); 
//关闭Excel 
myExcel.Quit(); 
//释放Excel资源 
System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel); 
myBook = null; 
mySheet = null; 
myRange = null; 
myExcel = null; 
GC.Collect();