您的位置:首页 > 编程语言 > C#

C#操作Excel

2016-11-22 13:31 507 查看
一、添加引用

要想用C#操作Excel,首先需要保证导入了Excel类库,具体操作如下:

解决方案选项卡下-->项目节点上右键-->添加引用-->.NET选项卡-->选择Microsoft.Office.Interop.Excel-->确定

微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。

(1) Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。

(2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。

(3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。

(4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。
二、Excel的处理:如果在你已知Excel格式的情况下,可以控制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、合并单元格:ExcelApp.worksheets[1].range[A1:F8'].Merge(abc);注:要声明变量abc: Variant;
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;
对Excel的其他控制:
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);

三、下面的方法主要是对于一个已知的EXCEL进行合并里面的单元格。
string savePath="C:\\Users\\Administrator\\Desktop\\xxx.xls";//excel的路径

Microsoft.Office.Interop.Excel.Application xlApp = null;//Execl的操作类

Microsoft.Office.Interop.Excel.Workbook myWorkbook = null;//打开已有的工作簿

try

{

   xlApp = new Microsoft.Office.Interop.Excel.Application();

   myWorkbook = xlApp.Workbooks.Open(savePath);

   Microsoft.Office.Interop.Excel.Worksheet mySheet = myWorkbook.ActiveSheet;//获取工作表

   int excelCount = mySheet.UsedRange.CurrentRegion.Rows.Count;//获得记录的行数

   MergeCell(ref mySheet, 1, excelCount, "A");//合并单元格

   MergeCell(ref mySheet, 1, excelCount, "B");//合并单元格

   //设置禁止弹出保存和覆盖的询问提示框

   xlApp.DisplayAlerts = false;

   xlApp.AlertBeforeOverwriting = false;
   //保存所做的修改

   xlApp.SaveWorkspace();

}

catch (Exception ex)

{
//异常时,处理代码

}

finally

{

   if (xlApp!=null)

        xlApp.Quit();//退出Excel

   xlApp = null;

}

/// <summary>

/// 合并指定EXCEL的单元格

/// </summary>

/// <param name="mySheet">指定的EXCEL工作表</param>

/// <param name="startLine">起始行</param>

/// <param name="recCount">总行数</param>

/// <param name="col">要合并的列</param>

private void MergeCell(ref Microsoft.Office.Interop.Excel.Worksheet mySheet, int startLine, int recCount, string col)

{

    //获得起始行合并列单元格的填充内容

    string qy1 = mySheet.get_Range(col + startLine.ToString(), col + startLine.ToString()).Text.ToString();

    Microsoft.Office.Interop.Excel.Range rg1;

    string strtemp = "";

    bool endCycle = false;

    //从起始行到终止行做循环

     for (int i = startLine; i <= recCount + startLine - 1&&!endCycle; )

     {

         for (int j = i + 1; j <= recCount + startLine - 1; j++)

         {

             rg1 = mySheet.get_Range(col + j.ToString(), col + j.ToString());//获得下一行的填充内容

             strtemp = rg1.Text.ToString().Trim();

             //最后一行时,标记循环结束

             if (j == recCount + startLine - 1)

                 endCycle = true;

             if (strtemp.Trim()==qy1.Trim() )//内容等于初始内容

             {

                 rg1 = mySheet.get_Range(col + i.ToString(), col + j.ToString());//选取上条合并位置和当前行的合并区域

                 rg1.ClearContents();//清空要合并的区域

                 rg1.MergeCells = true;

                 if (col == "A")

                     mySheet.Cells[i, 1] = qy1;

                 else if (col == "B")

                     mySheet.Cells[i, 2] = qy1;

             }

             else//内容不等于初始内容

             {

                 i = j;//i获取新值

                 qy1 = mySheet.get_Range(col + j.ToString(), col + j.ToString()).Text.ToString();

                 break;

             }

         }

     }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: