ASP.net 读写Excel模版

1.1.1引用的添加

 添加引用后会在程序的bin目录下有一个Interop.Excel.dll文件,在应用程序页面添加引用的命名空间using Excel;

  

1.1.2模板的读写方法

读模板的话,首先模板存放在某个路径下,根据模板把从数据库里取出的数据写回EXCEL然后生成一个新的EXCEL存放都另一个路径以供下载,模板不变。

//建立一个Excel.Application的新进程

Excel.Applicationapp = newExcel.Application();

if(app == null)

{

return;

}

app.Visible = false;

app.UserControl = true;

Workbooksworkbooks = app.Workbooks;

_Workbookworkbook = workbooks.Add(template_path + """测试.xls");//这里的Add方法里的参数就是模板的路径

Sheetssheets = workbook.Worksheets;

_Worksheetworksheet = (_Worksheet)sheets.get_Item(1);//这里表示模板只有一个sheet

if(worksheet == null)

{

return;

}

如果没有实际的物理模板,可以继承一个空的模板进行读写

_Workbookworkbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);//这里的Add方法里的参数就相当于继承了一个空模板

单元格的赋值如下

worksheet.Cells[i, i] = "XX";//表示EXCEL表的第i行第i列,对其它行列的赋值也一样

1.1.3方法的调用

关于单元格处理的操作类在ExcelOperate.cs类文件里

设置连续单元格边框颜色

worksheet.get_Range(worksheet.Cells[i,1],worksheet.Cells[i, 14]).Borders.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);//表示第i行的第1列到14列的边框颜色为黑色,只需给定开始单元格和结束单元格

设置行高

excelOperate.SetRowHeight(worksheet, worksheet.Cells[i,1],worksheet.Cells[i, 14], 24);//行高设定为24

设置连续单元格的背景颜色

excelOperate.SetBgColor(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14], System.Drawing.Color.Silver);//设置背景颜色为银白色

设置连续单元格的字体大小

excelOperate.SetFontSize(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14],12);//字体设为12号大小

单元格字体的设置

excelOperate.SetBold(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14]);//黑体字

单元格字体颜色设置

excelOperate.SetColor(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14], System.Drawing.Color.Red); //体字颜色设为红色

单元格内容剧中显示设置

excelOperate.SetHAlignCenter(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14]);

合并单元格

worksheet.get_Range(worksheet.Cells[i,1],worksheet.Cells[i,14]).Merge(Missing.Value);//合并第i行1至14列的单元格worksheet.get_Range (worksheet.Cells[i,1],worksheet.Cells[i,1]).Value2 = "xx";//给合并后的单元格赋值,合并后的单元格为第i行的第一个单元格

(注:如果在程序中动态合并单元格,合并前必须保证各单元格的内容为空,所以一般在合并相同内容的单元格之前,先保存原有的值,清空要合并的单元格的值,然后进行合并操作再赋值即可,之所以要清空是因为我们在操作实际的EXCEL合并单元格的时候,如果各单元格有值,鼠标操作合并的时候会提示“选定区域包含多重数值。合并到一个单元格后只能保留最左上角的数据” ,点确定后单元格会保留最左上单元格的值,而程序执行过程中遇到这种情况会直接导致程序执行中断,无法正常导出)

 

保存生成的EXCEL文件

workbook.SaveAs(save_path, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);//save_path为要保存到的文件路径

excelOperate.Dispose(worksheet, workbook, app);//生成好EXCEL文件后关闭Excel进程

 

EXCEL模板中含多个sheet的操作

1.如果模板中只包含固定的多各sheet(以2各为例),可以这样进行读写访问

_Worksheetworksheet1 = (_Worksheet)sheets.get_Item(1);//读第一个sheet

_Worksheetworksheet2 = (_Worksheet)sheets.get_Item(2);//读第二个sheet

赋值操作和上面说的类似,如下:

Worksheet1.Cells[i, i] = "XXX";

Worksheet2.Cells[i, i] = "XXXX";

 

2.如果要在应用程序中动态生成多个sheet(以其中一个sheet为样本生成),如要按月份生成每月一个sheet,那么模板中只需包含一个sheet模板,可根据选择的月份个数在应用程序中复制相同的几个sheet即可。

for(inti = 1; i < monthCount; i++)

worksheet.Copy(Missing.Value, workbook.Worksheets[1]);//月统计工作薄,如果选择了三个月,即monthCount=3,那么就会再复制两个相同的sheet,然后进行读写操作,如下面的代码片段:

 

intitem_id = 1;

_Worksheetws = null;

for(inti = 0; i < tableMM.Rows.Count; i++)

{

……

if(tableMM.Rows[i]["DATE_MONTH"].ToString() == Month)

{

ws = (_Worksheet)sheets.get_Item(item_id);

ws.Cells[3 + i, 1] = rowNum;

ws.Cells[3 + i, 2] = tableMM.Rows[i]["PROJNO"];

continue;

}

……

ws.Name = "XXName";//sheet的名称

item_id++;

}

 

 

         worksheet1.Columns.ColumnWidth = 20;//全局行宽 

     worksheet1.Columns.RowHeight = 20;//全局列高 

 Range range1 = (Range) worksheet1.Cells[2, 1];

     range1.Columns.ColumnWidth = 40;//单元格行宽

   range1.Columns.RowHeight = 40;//单元格列高 

 excel1.Visible = true;

删除原来的空Sheet

((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete()

设置默认选中是第一个Sheet 类似于Select();
        ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Activate();

转载于:https://www.cnblogs.com/sjaroom/archive/2013/05/25/3099445.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值