数据导出到Excel

时间:2023-01-13 09:32:48
调用:
 string strSql = @"select * from part;select * from part";
           DataSet ds= SqlHelper.ExcuteDataset(strSql);
           ds.Tables[0].TableName = "第一张表";
           ds.Tables[1].TableName = "第二张表";
           ExcelHelper.ExportToExcel(ds, @"D:\1.xlsx");

以下是实现简单导出的Excel导出类和注释。可直接使用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Excel = Microsoft.Office.Interop.Excel;

namespace ClassLib
{
  public  static  class ExcelHelper
    {
        public static  void ExportToExcel(DataSet ds, string strExcelFileName)
        {
            Excel.Application ExcelApp = new Excel.Application();//实例化一个excel程序对象。启动了进程
            ExcelApp.Visible = false;//让后台执行设置为不可见,为true的话会看到打开一个Excel
            Excel.Workbook workbook = ExcelApp.Workbooks.Add(true);//添加一个workbook,经调试内含一张worksheet
            //Excel.Worksheet worksheet = workbook.Worksheets.Add(true );//此添加方法错误。
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets.get_Item(1);//设置内含的一张worksheet为活动sheet
            int tableNum = 1;
            foreach (DataTable dt in ds.Tables)
            {
                if (tableNum > 1)
                {
                    //worksheet = workbook.Worksheets.Add();完整方法是workbook.Worksheets.Add(Before, After, Count, Type);before参数后,after参数前。count为个数,type为类型可
                    //选xlWorksheet、xlChart、xlExcel4MacroSheet 或 xlExcel4IntlMacroSheet,例如:excel.Worksheets.Add(System.Reflection.Missing.Value, sheet, 1, Excel.XlSheetType.xlWorksheet);

                    worksheet = (Excel .Worksheet )workbook.Worksheets.Add();//添加一张工作薄到当前工作薄前面 ,等价于以下三句
                    // workbook.Worksheets.Add();//添加一张工作薄
                    // worksheet = workbook.Worksheets[1];//获取第1张工作薄
                    //(Excel.Worksheet)excel.Application.Worksheets.get_Item(1);//设置第1张工作薄为活动

                }
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Excel.Range range = (Excel.Range)worksheet.Cells[1, i + 1];
                    range.Value = dt.Columns[i].ToString();//行列都是从1开始的
                    range.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐 
                }
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();//因为首行是列头,所以从第二行开始
                    }
                }
                worksheet.Name = dt.TableName;
                tableNum++;
            }
            //设置禁止弹出保存和覆盖的询问提示框   
            ExcelApp.DisplayAlerts = false;
            ExcelApp.AlertBeforeOverwriting = false;

            ExcelApp.Visible = false;
            workbook.SaveAs(strExcelFileName);
            ExcelApp.Quit();    //确保Excel进程关闭 
            ExcelApp = null;
            GC.Collect();
        }
    }
}