C# 导出Excel

一、插件

首先,导入插件

二、代码

引入DLL      using Microsoft.Office.Interop.Excel;

代码:

/// <summary>
/// 导出Excel
/// </summary>
/// <param name="dt"></param>
public static void ExportExcel(System.Data.DataTable dt)
{
    if (dt == null || dt.Rows.Count == 0) return;

    //创建excel对象
    Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
    if (xlApp == null) { return; }

    System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
    Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
    Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
    Microsoft.Office.Interop.Excel.Range range;
    long totalCount = dt.Rows.Count;
    long rowRead = 0;
    float percent = 0;

    //第一种方式 设置第一列的宽度
    //Range oCells = worksheet.get_Range("A1", Missing.Value);
    //((Range)oCells.Cells[1, 0 + 1]).EntireColumn.ColumnWidth = 20;
    //第二种方式 设置第一列的宽度
    //Range ran = worksheet.Cells[1, 1];
    //ran.EntireColumn.ColumnWidth = 20;

    //添加标题
    for (int i = 0; i < dt.Columns.Count; i++)
    {
        //title
        worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
        //获取列的实例
        range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];
        //设置颜色,15为颜色编号
        range.Interior.ColorIndex = 15;
        //字体加粗
        range.Font.Bold = true;
    }

    //添加内容
    for (int r = 0; r < dt.Rows.Count; r++)
    {
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString();
        }
        rowRead++;
        percent = ((float)(100 * rowRead)) / totalCount;
    }

    //自动调整列宽
    Range allColumn = worksheet.Columns;
    allColumn.AutoFit();

    //是否可见,在桌面上显示Excel表格
    //xlApp.Visible = true;

    //打开目录选择界面
    using(SaveFileDialog SaveFile = new SaveFileDialog())
    {
        //文本筛选,excel        
        SaveFile.Filter = "|*.xlsx|(*.et;*.xls;*.xlsx)|*.et;*.xls;*.xlsx|All files(*.*)|*.*|txt files(*.txt)|*.txt|*.word|";                                                                                                          
        //SaveFile.Filter = "All files(*.*)|*.*|txt files(*.txt)|*.txt";//文本筛选txt
        //文本筛选器索引,选择第一项就是1
        SaveFile.FilterIndex = 1;
        SaveFile.RestoreDirectory = true;
        //点击确认后    
        if (SaveFile.ShowDialog() == DialogResult.OK)
        {
            workbook.SaveAs(SaveFile.FileName);
        }
    }

    //释放资源
    CurrentCI.ClearCachedData();
    workbook.Close();
    CurrentCI = null;
    workbook = null;
    workbooks = null;
    xlApp = null;    
}

三、常用的API

基本操作:

Excel对象模型包括了128个不同的对象,其中用得比较多的就四个:

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

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

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

(4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。

一般在操作中,都不开这下面四个:

Excel.Application oApp;
Excel._Workbook oWbook;
Excel._Worksheet oWSheet;
Excel.Range oRng;

然后创建Excel

//创建Excel对象
oApp = new Excel.Application();
oApp.Visible = true;    //是否可见

创建工作簿、工作表

//创建一个新的工作簿、工作表
oWbook = (Excel._Workbook)(oApp.Workbooks.Add(Missing.Value));
oWSheet = (Excel._Worksheet)oWbook.ActiveSheet;

取值

//获取单元格的值
sheet = ((Microsoft.Office.Interop.Excel.Range)oWSheet.Cells[1, 2]).Text;

写值

//设置某行某列的值,从1开始
oWSheet.Cells[1, 1] = "First Name";
oWSheet.Cells[1, 2] = "Last Name";

设置格式

//设置多个单元格格式
oWSheet.get_Range("A1", "D1").Font.Bold = true;
oWSheet.get_Range("A1", "D1").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;

保存

//保存工作簿
oWbook.Save();

另存为

Wbook.SaveAs(filePath + name, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);


下面是一些常用的代码:
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);

空的时候,还是把它写个类。

参考:http://www.cnblogs.com/seven-google/archive/2012/02/10/2344819.html
参考:https://www.cnblogs.com/liweis/p/4226832.html

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊思宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值