zoukankan      html  css  js  c++  java
  • EXCEL模板读写说明(转)

    link: http://www.cnblogs.com/heone/archive/2008/08/29/1279189.html

    author: 天下鹰

    content:

    简述

    1.1       使用范围

    该操作适用于VS2005及以上版本。

     

    函数调用说明

    1.1.1          引用的添加

    右键添加引用Excel LibraryVS200511.0版本,VS200812.0版本

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

     

     

    1.1.2          模板的读写方法

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

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

                                Excel.Application app = new Excel.Application();

                                if (app == null)

                                {

                                    return;

                                }

                                app.Visible = false;

                                app.UserControl = true;

                                Workbooks workbooks = app.Workbooks;

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

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

                                if (worksheet == null)

                                {

                                   return;

                             }

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

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

    单元格的赋值如下

    worksheet.Cells[i, i] = "达达集团";//表示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.75);//行高设定为24.75

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

    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],16);//字体设为16号大小

    单元格字体的设置

    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 = "无赖集团";//给合并后的单元格赋值,合并后的单元格为第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各为例),可以这样进行读写访问

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

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

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

    Worksheet1.Cells[i, i] = "赖达犯罪集团";

    Worksheet2.Cells[i, i] = "赖达破坏集团";

     

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

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

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

     

    int item_id = 1;

    _Worksheet ws = null;

    for (int i = 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 = "XX月份";//sheet的名称

    item_id++;

    }

  • 相关阅读:
    Lc20-Valid Parentheses
    Lc262-行程和用户
    Lc197-Rising Temperature
    Lc196-删除重复的电子邮箱
    Lc185-部门工资前三高的所有员工
    Lc18-四数之和
    Lc17-电话号码的字母组合
    Netty Java NIO 基本介绍 之 Selector,ServerSocketChannel , SocketChannel (二)
    Netty(二)工作原理模型
    Netty 异步模型
  • 原文地址:https://www.cnblogs.com/xiexiaokui/p/1279791.html
Copyright © 2011-2022 走看看