using Aspose.Cells;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Web;
namespace Utils.Datas
{
///
/// Excel操作帮助类 (引用程序集Aspose.Cells.dll)
///
public class ExcelHelper
{
///
/// 读取指定路径的Excel文件为DataTable
///
/// 文件全路径
/// 要开始读取的第一行在Excel中的行索引(默认会以此行各列数据作为DataTable的列名)
/// 要开始读取的第一列在Excel中的列索引
/// 文件尾部无效行数目(该部分所有行数据将不会被读取)
/// 返回DataSet
public static DataSet ReadExcel(string fileName, int firstRow = 0, int firstColumn = 0, int invalidEndRowNumber = 0)
{
DataSet ds = new DataSet();
try {
if (string.IsNullOrEmpty(fileName) || !System.IO.File.Exists(fileName)) {
return null;
}
//new Aspose.Cells.License().SetLicense(AsposeHelper.LStream);
Cells cells;
Workbook workbook = new Workbook(fileName);
foreach (Worksheet worksheet in workbook.Worksheets) {
cells = worksheet.Cells;//取Sheet读取
if (cells == null) {
return null;
}
try {
DataTable dt = cells.ExportDataTable(firstRow, firstColumn, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, true);
dt.TableName = worksheet.Name;//取Sheet的名字作为表名
if (dt != null && dt.Rows.Count > 0) {
ds.Tables.Add(dt);
}
} catch (Exception e) {
LogUtil.LogError("读取Excel内容失败:worksheet.Name" + worksheet.Name + " " + e.Message);
}
}
} catch (Exception ex) {
LogUtil.LogError("读取Excel内容失败:" + ex.Message);
}
return ds;
}
///
/// 将DataTable导出指定路径的Excel文件
///
/// DataTable
/// Excel文件的表头内容
/// 文件保存的全路径
public static void ExportExcel(DataTable dt, string headerText, string path)
{
Workbook workbook = new Workbook(); //工作簿
Worksheet sheet = workbook.Worksheets[0]; //工作表
Cells cells = sheet.Cells;//单元格
//为标题设置样式
Style styleTitle = workbook.Styles[workbook.Styles.Add()];//新增样式
styleTitle.HorizontalAlignment = TextAlignmentType.Center;//文字居中
styleTitle.Font.Name = "宋体";//文字字体
styleTitle.Font.Size = 18;//文字大小
styleTitle.Font.IsBold = true;//粗体
//样式2
Style style2 = workbook.Styles[workbook.Styles.Add()];//新增样式
style2.HorizontalAlignment = TextAlignmentType.Center;//文字居中
style2.Font.Name = "宋体";//文字字体
style2.Font.Size = 14;//文字大小
style2.Font.IsBold = true;//粗体
style2.IsTextWrapped = true;//单元格内容自动换行
style2.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
//样式3
Style style3 = workbook.Styles[workbook.Styles.Add()];//新增样式
style3.HorizontalAlignment = TextAlignmentType.Center;//文字居中
style3.Font.Name = "宋体";//文字字体
style3.Font.Size = 12;//文字大小
style3.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
style3.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
style3.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
style3.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
int Colnum = dt.Columns.Count;//表格列数
int Rownum = dt.Rows.Count;//表格行数
//生成行1 标题行
cells.Merge(0, 0, 1, Colnum);//合并单元格
cells[0, 0].PutValue(headerText);//填写内容
cells[0, 0].SetStyle(styleTitle);
cells.SetRowHeight(0, 38);
//生成行2 列名行
for (int i = 0; i < Colnum; i++) {
cells[1, i].PutValue(dt.Columns[i].ColumnName);
cells[1, i].SetStyle(style2);
cells.SetRowHeight(1, 25);
}
//生成数据行
for (int i = 0; i < Rownum; i++) {
for (int k = 0; k < Colnum; k++) {
cells[2 + i, k].PutValue(dt.Rows[i][k].ToString());
cells[2 + i, k].SetStyle(style3);
}
cells.SetRowHeight(2 + i, 24);
}
workbook.Save(path);
}
}
}