c# applibrary实现一个Sheet表中存放多张DataTable数据
生活随笔
收集整理的這篇文章主要介紹了
c# applibrary实现一个Sheet表中存放多张DataTable数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、工具類(applibrary.dll)
public class ExcelHelper {/// <summary>/// 文件名/// </summary>public string fileName { get; set; }/// <summary>/// 工作簿列表 /// </summary>public List<WorkSheet> workSheets { get; set; }/// <summary>/// Excel文檔對象/// </summary>public XlsDocument doc { get; set; }public string message { get; set; }public ExcelHelper() {doc = new XlsDocument();workSheets = new List<WorkSheet>();}/// <summary>/// 導出Excel/// </summary>/// <returns></returns>public bool ToExcel() {if (string.IsNullOrEmpty(fileName)) {message = "請輸入文件名";return false;}if (workSheets.Count == 0) {message = "請指定工作簿數據";return false;}doc.FileName = fileName;foreach (var workSheet in workSheets) {AppLibrary.WriteExcel.Worksheet sheet = null;//判斷Worksheet是否存在try {sheet = doc.Workbook.Worksheets[workSheet.name];} catch (Exception ex) {sheet = doc.Workbook.Worksheets.Add(workSheet.name);}AppLibrary.WriteExcel.Cells cells = sheet.Cells;var dt = workSheet.table;for (int j = 0; j <= dt.Columns.Count - 1; j++) {if (workSheet.xf != null) {cells.Add(workSheet.startX, workSheet.startY + j, dt.Columns[j].ColumnName, workSheet.xf);} else {cells.Add(workSheet.startX, workSheet.startY + j, dt.Columns[j].ColumnName);}}for (int i = 0; i <= dt.Rows.Count - 1; i++) {for (int j = 0; j <= dt.Columns.Count - 1; j++) {cells.Add(i + 1 + workSheet.startX, j + workSheet.startY, dt.Rows[i][j].ToEString());}}}doc.Send();return true;}}public class WorkSheet {private int _startX = 1;private int _startY = 1;public string name { get; set; }public DataTable table { get; set; }public int startX {get {return _startX;}set {if (value > 1) {_startX = value;}}}public int startY {get {return _startY;}set {if (value > 1) {_startY = value;}}}public AppLibrary.WriteExcel.XF xf { get; set; }}2、調用代碼:
ExcelHelper excel = new ExcelHelper();excel.fileName = batchNo + ".xls";//匯總sql = string.Format(@"SELECT * from SKU WHERE batchNo='{0}'", batchNo);ret = dbHelper.Query(sql);AppLibrary.WriteExcel.XF xfcolumn = excel.doc.NewXF();xfcolumn.Font.Bold = true;xfcolumn.Pattern = 1;xfcolumn.PatternColor = AppLibrary.WriteExcel.Colors.Cyan;excel.workSheets.Add(new WorkSheet() { name = "自動匯總", table = ret.Tables[0], xf = xfcolumn });3、設置樣式和寬度,表頭和單元格樣式要分開設置,申明兩個XF變量。
#region 設置樣式//設置單元格樣式var xf = doc.NewXF();xf.UseBorder = true;xf.LeftLineStyle = 1;xf.RightLineStyle = 1;xf.TopLineStyle = 1;xf.BottomLineStyle = 1;xf.LeftLineColor = AppLibrary.WriteExcel.Colors.Black;xf.RightLineColor = AppLibrary.WriteExcel.Colors.Black;xf.TopLineColor = AppLibrary.WriteExcel.Colors.Black;xf.BottomLineColor = AppLibrary.WriteExcel.Colors.Black;xf.UseFont = true;//設置表頭樣式var thXf = doc.NewXF();thXf.Pattern = 1;thXf.PatternColor = AppLibrary.WriteExcel.Colors.Default1B;thXf.UseBorder = true;thXf.LeftLineStyle = 1;thXf.RightLineStyle = 1;thXf.TopLineStyle = 1;thXf.BottomLineStyle = 1;thXf.LeftLineColor = AppLibrary.WriteExcel.Colors.Black;thXf.RightLineColor = AppLibrary.WriteExcel.Colors.Black;thXf.TopLineColor = AppLibrary.WriteExcel.Colors.Black;thXf.BottomLineColor = AppLibrary.WriteExcel.Colors.Black;thXf.Font.Bold = true;#endregion#region 寬度AddColumnInfo(doc, sheet, 0, 8, 15);AddColumnInfo(doc, sheet, 9, 9, 30);AddColumnInfo(doc, sheet, 10, 15, 15);#endregion
private static void AddColumnInfo(AppLibrary.WriteExcel.XlsDocument doc, AppLibrary.WriteExcel.Worksheet sheet, int start, int end, int width) {AppLibrary.WriteExcel.ColumnInfo colInfo = new AppLibrary.WriteExcel.ColumnInfo(doc, sheet);colInfo.ColumnIndexStart = (ushort)start;colInfo.ColumnIndexEnd = (ushort)end;colInfo.Width = (ushort)(width * 256);sheet.AddColumnInfo(colInfo);}
?
說明:
1、一個Sheet表中可以存放多張DataTable數據
2、服務端無需安裝Excel
3、Send方法直接導出到瀏覽器端,無需先存本地再讀取本地文件轉換成byte輸出
轉載于:https://www.cnblogs.com/len0031/p/6141933.html
總結
以上是生活随笔為你收集整理的c# applibrary实现一个Sheet表中存放多张DataTable数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【BZOJ-2938】病毒 T
- 下一篇: 作业11图