C# 中使用 Aspose.Cells 实现 Excel 的导入、导出操作

  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 文件转换成 DataTableDataSet ,将 DataTableDataSet 存储为 Excel 文件等应用作为案例进行简单演示。

前言

  在我们日常的系统开发中,Aspose.Cells 可以应用于 Excel 数据的导入/导出,Web 网站系统中的 Excel 文件数据的上传下载。因其具有强大的灵活性,且不依赖 Microsoft Excel 环境,备受广大开发人员的喜爱。
  在使用 Aspose.Cells 之前,需要安装 Aspose.CellsNuGet 包:
  程序包管理器控制台安装:

PM> Install-Package Aspose.Cells

  NuGet 包管理器安装:
导入 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 的时候做好过滤这个水印内容即可。
水印图片

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值