zoukankan      html  css  js  c++  java
  • 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 下载速度 设置
  • 相关阅读:
    delphi 的插件机制与自动更新
    delphi 的 ORM 框架
    canner CMS 系统 (公司在台湾) https://www.canner.io/
    区块链 ---- 数字货币交易
    BIM平台 http://gzcd.bim001.cn
    TreeGrid 控件集 :delphi 学习群 ---- 166637277 (Delphi学习交流与分享)
    UniGUI 如何进行 UniDBGrid 的单元 Cell 的计算 ?
    国产 WEB UI 框架 (收费)-- Quick UI,Mini UI
    iOS尽量不要在viewWillDisappear:方法中移除通知
    Tips:取消UICollectionView的隐式动画
  • 原文地址:https://www.cnblogs.com/ant520/p/1977311.html
Copyright © 2011-2022 走看看