Aspose.Cells 是一款功能强大的 Excel 电子表格处理程序库,处理的 Excel 格式包括XLS、XLSX、XLSM、XLSB、XLTX、XLTM、CSV、SpreadsheetML、ODS等,可以将 Excel 文件导出为 PDF, XPS, HTML, MHTML, Plain Text and popular image formats including TIFF, JPG, PNG, BMP and SVG 等。
官网文档地址:https://docs.aspose.com/cells/net/
下面我将以 Excel 文件转换成 DataTable 、DataSet ,将 DataTable 、DataSet 存储为 Excel 文件等应用作为案例进行简单演示。
前言
在我们日常的系统开发中,Aspose.Cells
可以应用于 Excel 数据的导入/导出,Web 网站系统中的 Excel 文件数据的上传下载。因其具有强大的灵活性,且不依赖 Microsoft Excel 环境,备受广大开发人员的喜爱。
在使用 Aspose.Cells 之前,需要安装 Aspose.Cells 的 NuGet
包:
程序包管理器控制台安装:
PM> Install-Package Aspose.Cells
NuGet 包管理器安装:
引入命名空间:
using Aspose.Cells;
导入 Excel 文件为 DataTable
闲话少说,下方见 Demo :
/// <summary>
/// 传入路径,返回 DataTable
/// </summary>
/// <param name="path">Excel 路径,例如:@"E:\C#导入Excel测试数据.xlsx"</param>
/// <returns>一个 DataTable 的数据</returns>
public static DataTable ExcelToDataTable(string path)
{
DataTable dataTable = new DataTable();
Workbook book = new Workbook(path);
// Excel 中 sheets 数量必须大于 0
if (book.Worksheets.Count > 0)
{
// 导入 Excel 文件中的第一个 sheets 工作表
Cells cells = book.Worksheets[0].Cells;
// sheets 中的数据必须存在
if (cells.MaxDataRow != -1 && cells.MaxDataColumn != -1)
{
// 方法 ExportDataTable 的参数说明
// 要导出的第一个单元格的行号。
// 要导出的第一个单元格的列号。
// 要导入的行数。
// 要导入的列数。
// 指示第一行的数据是否导出到DataTable的列名。
dataTable = cells.ExportDataTable(0, 0, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, true);
}
}
return dataTable;
}
导入 Excel 文件为 DataSet
Demo :
/// <summary>
/// 传入路径,返回 DataSet
/// </summary>
/// <param name="path">Excel 路径,例如:@"E:\C#导入Excel测试数据.xlsx"</param>
/// <returns>一个DataSet的数据</returns>
public static DataSet ExcelToDataSet(string path)
{
DataSet dataSet = new DataSet();
Workbook book = new Workbook(path);
// Excel 中 sheets 数量必须大于 0
if (book.Worksheets.Count > 0)
{
// 遍历 Worksheets
foreach (var sheets in book.Worksheets)
{
// sheets 中的数据必须存在
if (sheets.Cells.MaxDataRow != -1 && sheets.Cells.MaxDataColumn != -1)
{
// 方法 ExportDataTable 的参数说明
// 要导出的第一个单元格的行号。
// 要导出的第一个单元格的列号。
// 要导入的行数。
// 要导入的列数。
// 指示第一行的数据是否导出到DataTable的列名。
DataTable dataTable = sheets.Cells.ExportDataTable(0, 0, sheets.Cells.MaxDataRow + 1, sheets.Cells.MaxDataColumn + 1, true);
dataSet.Tables.Add(dataTable);
}
}
}
return dataSet;
}
导出 DataTable
到 Excel 文件
/// <summary>
/// DataTable数据导出Excel
/// </summary>
/// <param name="data">DataTable 数据</param>
/// <param name="filepath">文件保存路径名称</param>
public static void DataTableExport(DataTable data, string filepath)
{
// 创建工作簿
Workbook book = new Workbook();
// 创建工作表
Worksheet sheet = book.Worksheets[0];
// 单元格
Cells cells = sheet.Cells;
// 生成行 列名行
for (int i = 0; i < data.Columns.Count; i++)
{
cells[0, i].PutValue(data.Columns[i].ColumnName);
}
// 生成数据行
for (int i = 0; i < data.Rows.Count; i++)
{
for (int k = 0; k < data.Columns.Count; k++)
{
cells[1 + i, k].PutValue(data.Rows[i][k].ToString()); //添加数据
}
}
// 自适应宽
sheet.AutoFitColumns();
// 保存
book.Save(filepath);
GC.Collect();
}
导出 DataSet
到 Excel 文件
/// <summary>
/// DataSet 数据导出 Excel
/// </summary>
/// <param name="dataset">DataSet 数据</param>
/// <param name="filepath">文件保存路径名称</param>
public static void DataSetExport(DataSet dataset, string filepath)
{
// 创建工作簿
Workbook book = new Workbook();
for (int i = 0; i < dataset.Tables.Count; i++)
{
if (i!=0)
{
book.Worksheets.Add($"Sheet{i + 1}");
}
// 创建工作表
Worksheet sheet = book.Worksheets[i];
// 单元格
Cells cells = sheet.Cells;
// 生成行 列名行
for (int j = 0; j < dataset.Tables[i].Columns.Count; j++)
{
cells[0, j].PutValue(dataset.Tables[i].Columns[j].ColumnName);
}
// 生成数据行
for (int l = 0; l < dataset.Tables[i].Rows.Count; l++)
{
for (int k = 0; k < dataset.Tables[i].Columns.Count; k++)
{
cells[1 + l, k].PutValue(dataset.Tables[i].Rows[l][k].ToString()); //添加数据
}
}
// 自适应宽
sheet.AutoFitColumns();
}
// 保存
book.Save(filepath);
GC.Collect();
}
提示: 在将数据导出成 Excel 的时候可能会同时导出
Aspose
打上水印的 Sheet (如下图所示),可以参考以下网站进行去除这一页的水印:https://blog.aspose.com/2021/01/02/evaluation-limitations-aspose-apis/
https://blog.aspose.com/2020/07/20/how-to-buy-aspose-license-a-step-by-step-guide/个人觉得,如果没有特殊要求的话,其实也是不影响业务开发的,只需要在读取 Sheet 的时候做好过滤这个水印内容即可。