C# 操作EXCEL

(1)如何引用单元格和区域:


指定单元格或单元格区域,然后对该单元格或单元格区域进行一些操作,如输入公式或更改格式。通常用一条语句就能完成操作,该语句可标识单元格,还可更改某个属性或应用某个方法。Range 对象既可表示单个单元格,也可表示单元格区域。下列主题说明了标识和处理 Range 对象最常用的方法


示例1将单元格区域 A1:D5 的字体设置为加粗。


Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.Bold =True


演示了使用 Range 属性的一些 A1 样式引用。


引用                   含义


Range("A1")            单元格 A1


Range("A1:B5")         从单元格 A1 到单元格 B5 的区域


Range("C5:D9,G9:H16")  多块选定区域


Range("A:A")           A 列


Range("1:1")           第一行


Range("A:C")           从 A 列到 C 列的区域


Range("1:5")           从第一行到第五行的区域


Range("1:1,3:3,8:8")   第 1、3 和 8 行


Range("A:A,C:C,F:F")   A 、C 和 F 列


示例2 用编号引用单元格


通过使用行列编号,可用 Cells 属性来引用单个单元格。该属性返回代表单个单元格的 Range 对象。下例中,Cells(6,1) 返回 Sheet1 上的单元格 A6,然后将 Value 属性设置为 10。


Worksheets("Sheet1").Cells(6, 1).Value = 10


示例3 引用行和列


可用 Rows 属性或 Columns 属性来处理整行或整列。这两个属性返回代表单元格区域的 Range 对象。下例中,用 Rows(1) 返回 Sheet1 上的第一行,然后将单元格区域的 Font 对象的 Bold 属性设置为 True。


   Worksheets("Sheet1").Rows(1).Font.Bold = True


演示使用 Rows 和 Columns 属性的一些行和列的引用。


引用              含义


Rows(1)           第一行


Rows              工作表上所有的行


Columns(1)         第一列


Columns("A")      第一列


Columns           工作表上所有的列


示例4 相对于其他单元格来引用单元格


处理相对于另一个单元格的某一单元格的常用方法是使用 Offset 属性。下例中,将位于活动工作表上活动单元格下一行和右边三列的单元格的内容设置为双下划线格式。


    ActiveCell.Offset(1, 3).Font.Underline = xlDouble


(2)页面控制


   Dim ExcelID as Excel.Application


Set ExcelID as new Excel.Application


1) 显示当前窗口:


ExcelID.Visible := True;


2) 更改 Excel 标题栏:


ExcelID.Caption := '应用程序调用 Microsoft Excel';


3) 添加新工作簿:


     ExcelID.WorkBooks.Add;


4) 打开已存在的工作簿:


     ExcelID.WorkBooks.Open( 'C:\Excel\Demo.xls' );


5) 设置第2个工作表为活动工作表:


     ExcelID.WorkSheets[2].Activate;


或 ExcelID.WorkSheets[ 'Sheet2' ].Activate;


6) 给单元格赋值:


     ExcelID.Cells[1,4].Value := '第一行第四列';


7) 设置指定列的宽度(单位:字符个数),以第一列为例:


     ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;


8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:


     ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米


9) 在第8行之前插入分页符:


     ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;


10) 在第8列之前删除分页符:


     ExcelID.ActiveSheet.Columns[4].PageBreak := 0;


11) 指定边框线宽度


 ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight :=3;


      1-左    2-右   3-顶    4-底   5-斜( \ )     6-斜( / )


12) 清除第一行第四列单元格公式:


     ExcelID.ActiveSheet.Cells[1,4].ClearContents;


13) 设置第一行字体属性:


ExcelID.ActiveSheet.Rows[1].Font.Name := '隶书';


ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;


ExcelID.ActiveSheet.Rows[1].Font.Bold := True;


ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;


14) 进行页面设置:


a.页眉:


    ExcelID.ActiveSheet.PageSetup.CenterHeader := '报表演示';


b.页脚:


    ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P页';


c.页眉到顶端边距2cm:


    ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;


d.页脚到底端边距3cm:


    ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;


e.顶边距2cm:


    ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;


f.底边距2cm:


    ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;


g.左边距2cm:


    ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;


h.右边距2cm:


    ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;


i.页面水平居中:


    ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;


j.页面垂直居中:


    ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;


k.打印单元格网线:


    ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;


15) 拷贝操作:


a.拷贝整个工作表:


   ExcelID.ActiveSheet.Used.Range.Copy;


b.拷贝指定区域:


   ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;


c.从A1位置开始粘贴:


   ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;


d.从文件尾部开始粘贴:


   ExcelID.ActiveSheet.Range.PasteSpecial;


16) 插入一行或一列:


   a. ExcelID.ActiveSheet.Rows[2].Insert;


   b. ExcelID.ActiveSheet.Columns[1].Insert;


17) 删除一行或一列:


   a. ExcelID.ActiveSheet.Rows[2].Delete;


   b. ExcelID.ActiveSheet.Columns[1].Delete;


18) 打印预览工作表:


   ExcelID.ActiveSheet.PrintPreview;


19) 打印输出工作表:


   ExcelID.ActiveSheet.PrintOut;


20) 工作表保存:


    If not ExcelID.ActiveWorkBook.Saved then


          ExcelID.ActiveSheet.PrintPreview


   End if


21) 工作表另存为:


     ExcelID.SaveAs( 'C:\Excel\Demo1.xls' );


22) 放弃存盘:


     ExcelID.ActiveWorkBook.Saved := True;


23) 关闭工作簿:


     ExcelID.WorkBooks.Close;


24) 退出 Excel:


ExcelID.Quit;


25) 设置工作表密码:


ExcelID.ActiveSheet.Protect "123",


DrawingObjects:=True,


Contents:=True, Scenarios:=True


26) EXCEL的显示方式为最大化


ExcelID.Application.WindowState = xlMaximized   


27) 工作薄显示方式为最大化


ExcelID.ActiveWindow.WindowState = xlMaximized


28) 设置打开默认工作薄数量


ExcelID.SheetsInNewWorkbook = 3


29) '关闭时是否提示保存(true 保存;false 不保存)


ExcelID.DisplayAlerts = False


30) 设置拆分窗口,及固定行位置


ExcelID.ActiveWindow.SplitRow = 1


ExcelID.ActiveWindow.FreezePanes = True


31)打印


sheets.PageSetup.PrintTitleRows   =   "$1:$3";//顶端标题行  


    sheets.PageSetup.PaperSize=Excel.XlPaperSize.xlPaperA3;//.xlPaperB4;//纸张大小  


    sheets.PageSetup.Orientation=Excel.XlPageOrientation.xlLandscape;//纸张方向.横向  


32) 行的样式:边线宽度,颜色


 destRange.Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle= Excel.XlLineStyle.xlContinuous;                    

destRange.Borders[Excel.XlBordersIndex.xlEdgeTop].Weight= (Excel.XlBorderWeight)Enum.Parse(typeof(Excel.XlBorderWeight),

 LineWidthCode(BaseRpt.mintOutLineWeight,true));                    

destRange.Borders[Excel.XlBordersIndex.xlEdgeTop].Color= BaseRpt.mlngOutLineColor;



33)


   //横向合并注意 方向为从右到左


  for (i = iTitleRow + 1; i <= iTitleRow + iHeadRow; i++)


   {


         j = iColNum;


         while (j > 1)


         {


              PrevRange = xlSheet.get_Range(xlSheet.Cells[i, j], xlSheet.Cells[i, j]);


              PrevValue = PrevRange.Value2.ToString();


              NextRange = PrevRange.get_Offset(0, -1);


              NextValue = NextRange.Value2.ToString();


              if (PrevValue == NextValue)


              {


                   NextRange.Value2 = "";


                   xlSheet.get_Range(NextRange, PrevRange).MergeCells = true;


              }


              j -= 1;


         }


   }


   //纵向合并 注意方向为从下到上,并且判断是否是已经合并过的单元格             


   for (j = 1; j <=iColNum; j++)


   {


        i = iTitleRow + iHeadRow;                   


        while (i >iTitleRow+1)


        {


            PrevRange = xlSheet.get_Range(xlSheet.Cells[i, j], xlSheet.Cells[i, j]);


            if ((bool)PrevRange.MergeCells)


            { PrevRange = (Excel.Range)PrevRange.MergeArea.get_Item(1, 1); }                      


            PrevValue = PrevRange.Value2.ToString();


            NextRange = PrevRange.get_Offset(-1, 0);


            if ((bool)NextRange.MergeCells)


            { NextRange = (Excel.Range)NextRange.MergeArea.get_Item(1, 1); }                       


            NextValue = NextRange.Value2.ToString();


            if (PrevValue == NextValue)


            {


                 NextRange.Value2 = "";


                 xlSheet.get_Range(NextRange, PrevRange).MergeCells = true;


            }                      


            i -= 1;


         }


  }           

 		Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
                object m_objOpt = System.Reflection.Missing.Value;
                Microsoft.Office.Interop.Excel.Workbooks ExcelBooks = (Microsoft.Office.Interop.Excel.Workbooks)ExcelApp.Workbooks;
                Microsoft.Office.Interop.Excel._Workbook ExcelBook = (Microsoft.Office.Interop.Excel._Workbook)(ExcelBooks.Add(m_objOpt));
                Microsoft.Office.Interop.Excel._Worksheet ExcelSheet = (Microsoft.Office.Interop.Excel._Worksheet)ExcelBook.ActiveSheet;

                //设置标题
                ExcelApp.Caption = "XX";
                
                //设置列宽
                //ExcelApp.Columns.EntireColumn.AutoFit();
                ExcelApp.get_Range("A1", System.Reflection.Missing.Value).ColumnWidth = 25;


                //设置列居中对齐
                //Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.Bold =True
                
                ExcelApp.get_Range("A:A", System.Reflection.Missing.Value).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;

                //写入列名
                for (int i = 1; i <= listV_fault.Columns.Count; i++)
                {
                    ExcelSheet.Cells[1, i] = listV_fault.Columns[i - 1].Text;
                }
                //写入内容
                for (int i = 2; i < listV_fault.Items.Count + 2; i++)
                {
                    ExcelSheet.Cells[i, 1] = listV_fault.Items[i - 2].Text;
                    for (int j = 2; j <= listV_fault.Columns.Count; j++)
                    {
                        ExcelSheet.Cells[i, j] = listV_fault.Items[i - 2].SubItems[j - 1].Text;
                    }
                }

                //获取当前时间并修改格式
                DateTime dtNowTime = DateTime.Now;
                string stNowTime = dtNowTime.ToString();
                stNowTime = stNowTime.Replace("/", "-");
                stNowTime = stNowTime.Replace(":", "_");

                //设置保存路径和名称
                string strPath = System.IO.Directory.GetCurrentDirectory() + string.Format(@"\XXX_{0}.xlsx", stNowTime);

                //保存并退出
                ExcelBook.SaveAs(strPath, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
                ExcelApp.Quit();

                //回收垃圾
                GC.Collect();

                      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值