天天看點

導出資料到Excel表(不需要本地安裝Office)

1.需要下載下傳一個用于導出的動态庫:

Aspose.Cells.dll 

動态庫+代碼下載下傳連結:http://download.csdn.net/detail/shaoyiju/9397997

2.動态庫使用方法

打開工程項目-->解決方案資料總管-->引用-->右鍵“添加引用”-->Tab頁“最近”,選擇動态庫确定後就可以使用啦

3.上碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
using Aspose.Cells;

namespace ATMClient.GSPublic
{
    /// <summary>
    /// 這個類是将DataSet中的資料導出到Excel表,不需調用本地的EXCEL.EXE程序
    /// </summary>
    class Export2Eexel
    {
        private void Test()
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();

            dt.TableName = "LogTable";

            dt.Columns.Add("序号", typeof(string));
            dt.Columns.Add("使用者", typeof(string));
            dt.Columns.Add("日期", typeof(string));
            dt.Columns.Add("操作", typeof(string));

            DataRow dr = dt.NewRow();
            dr[0] = "1";
            dr[1] = "admin";
            dr[2] = "2015-11-22 16:30:00";
            dr[3] = "登入";

            dt.Rows.Add(dr);

            ds.Tables.Add(dt);

            ExportIntoExcel(ds);

            return;
        }

        private void ExportIntoExcel(DataSet ds)
        {
            //打開儲存對話框
            Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
            dlg.FileName = "ATM記錄檔_" + DateTime.Now.ToString("yyyy-MM-dd_HHmmss");
            dlg.Filter = "EXCEL檔案(*.xls, *.xlsx)|*.xls;*.xlsx|所有檔案(*.*)|*.*";
            Nullable<bool> Res = dlg.ShowDialog();
            if (Res.HasValue)
            {
                if (Res.Value == true)
                {
                    string fileName = dlg.FileName;
                    try
                    {
                        List<int> columWidthList = new List<int>() { 10, 15, 30, 30 };

                        if (DataSetToExcel(fileName, "測試标題", ds, columWidthList))
                        {
                            System.Windows.MessageBox.Show("導出成功");
                        }
                        else
                        {
                            System.Windows.MessageBox.Show("導出失敗");
                        }
                    }
                    catch (Exception ex)
                    {
                        string err = ex.Message;
                        return;
                    }
                }
            }

            return;
        }

        public bool DataSetToExcel(string strFilePath,string reportTitleName, DataSet dataSet, List<int> columWidthList)
        {
            Workbook wb = new Workbook();
            Worksheet ws = wb.Worksheets[0];
            Cells cell = ws.Cells;

            DataTable dataTable = dataSet.Tables[0];
            int rowCount = dataTable.Rows.Count;            //不包括字段名
            int columnCount = dataTable.Columns.Count;
            
            if (rowCount == 0)
            {
                return false;
            }

            //合并第一行單元格作為标題
            Range range = cell.CreateRange(0, 0, 1, columnCount);
            range.Merge();
            cell["A1"].PutValue(reportTitleName);

            //設定行高
            cell.SetRowHeight(0, 20);

            // 設定标題字型樣式
            Style style1 = wb.Styles[wb.Styles.Add()];
            style1.HorizontalAlignment = TextAlignmentType.Center;  //文字居中
            style1.Font.Name = "宋體";
            style1.Font.IsBold = true;  //設定粗體
            style1.Font.Size = 12;      //設定字型大小
                
            // 設定内容字型樣式
            Style style2 = wb.Styles[wb.Styles.Add()];
            style2.HorizontalAlignment = TextAlignmentType.Center;
            style2.Font.Size = 10;

            //給單元格關聯樣式
            cell["A1"].SetStyle(style1); //報表名字 樣式

            //設定Execl列名
            for (int i = 0; i < columnCount; i++)
            {
                cell[1, i].PutValue(dataTable.Columns[i].ColumnName);
                cell[1, i].SetStyle(style2);
            }

            //設定單元格内容
            int posStart = 2;
            for (int r = 0; r < rowCount; r++)
            {
                for (int c = 0; c < columnCount; c++)
                {
                    cell[r + posStart, c].PutValue(dataTable.Rows[r][c]);
                    cell[r + posStart, c].SetStyle(style2);
                }
            }

            //設定列寬
            for (int i = 0; i < columnCount; i++)
            {
                cell.SetColumnWidth(i, Convert.ToDouble(columWidthList[i].ToString()));
            }

            //儲存excel表格
            wb.Save(strFilePath);

            return true;
        }
    }
}