使用Aspose.Cells读取导入Excel文件(转载)

我是为了解决npoi下无法识别空列导致列数不够的问题总是提示超出index值的提示并且定位不准确,可以使用 aspose.cell
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 等。
在我们日常的系统开发中,Aspose.Cells 可以应用于 Excel 数据的导入/导出,Web 网站系统中的 Excel 文件数据的上传下载。因其具有强大的灵活性,且不依赖 Microsoft Excel 环境,备受广大开发人员的喜爱。
  在使用 Aspose.Cells 之前,需要安装 Aspose.Cells 的 NuGet 包:
demo操作
导入 Excel 文件为 DataTable

/// <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

/// <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;
} 

导出 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/

本文转载:https://blog.csdn.net/weixin_45581482/article/details/118873685

以下方法仅做参考不一定适用:

using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Drawing;
    using Aspose.Cells;
    using System.IO;
    using System.Configuration;

    class ProcessExcel
    {
        //初始化excel
        public Workbook ImportExcel(string inputFile)
        {
            try
            {
                Workbook workBook = new Workbook();
                FileStream fs = new FileStream(ConfigurationSettings.AppSettings["InputFile"], FileMode.Open);
                int firstIndex=inputFile.LastIndexOf(".");
                string fileType = inputFile.Substring(firstIndex);
                if (fileType == ".xls")
                {
                    workBook.Open(fs);
                    return workBook;
                }
                else
                {
                    workBook.Open(fs, FileFormatType.Excel2007Xlsx);
                    return workBook;
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine("EXCEL初始化失败,请检查配置文件!");
                Console.ReadKey();
                return null;
            }
        }
     
        //处理sheet
        public void processSheet(Worksheet workSheet)
        {
            Cells cell = workSheet.Cells;
            int rowNum = cell.MaxDataRow;
            for (int i = 2; i <= rowNum; i++)
            {
                this.processRow(i, cell);
            }
        }


        //处理行
        public void processRow(int rowNum, Cells cell)
        {
            string userNO = cell[rowNum, 2].StringValue;
            string userContent = cell[rowNum, 3].StringValue;
            string expectReturnSMS = cell[rowNum, 4].StringValue;
            //用例标记为有效
            if (cell[rowNum, 1].StringValue == "1")
            {
                GetResult getResult = new GetResult();
                if (getResult.InvokeCMCC(userNO, userContent))
                {
                    if (getResult.GetReturnSMS(userNO))
                    {
                        getResult.GetTestResult(expectReturnSMS);
                        cell[rowNum, 5].PutValue(getResult.returnSMS);
                        if (getResult.testResult == "FALSE")
                        {
                            cell[rowNum, 6].PutValue(getResult.testResult);
                            cell[rowNum, 6].Style.BackgroundColor = Color.Red;
                        }
                        else
                        {
                            cell[rowNum, 6].PutValue(getResult.testResult);
                            cell[rowNum, 6].Style.BackgroundColor = Color.Green;
                        }
                    }
                    else
                    {
                        cell[rowNum, 6].PutValue("未获取到返回短信");
                        cell[rowNum, 6].Style.BackgroundColor = Color.Yellow;
                    }
                }
                else
                {
                    cell[rowNum, 6].PutValue("CMCC接口调用异常");
                    cell[rowNum, 6].Style.BackgroundColor = Color.Yellow;
                }
            }   
         
            //用例无效
            else if(cell[rowNum, 1].StringValue == "0")
            {
                GetResult getResult = new GetResult();
                if (getResult.InvokeCMCC(userNO, userContent))
                {
                    Console.WriteLine("此条用例无需执行");
                    Console.WriteLine();
                }
                else
                {
                    cell[rowNum, 6].PutValue("CMCC接口调用异常");
                    Console.WriteLine();
                }
            }

        }     
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Aspose.Cells可以通过使用Smart Markers来将JSON数据导出到Excel中。Smart Markers是一种特殊的标记语法,可以在Excel模板中定义,并在填充数据时使用。你可以在Aspose.Cells的官方文档中找到有关Smart Markers的更多信息\[1\]。 以下是一个简单的实现读取和导出Excel的操作类的示例代码\[2\]: ```java import com.aspose.cells.Workbook; import com.aspose.cells.Worksheet; import com.aspose.cells.Cells; import com.aspose.cells.Cell; import com.aspose.cells.SaveFormat; public class ExcelExporter { public static void exportToExcel(String jsonData, String templatePath, String outputPath) throws Exception { Workbook workbook = new Workbook(templatePath); Worksheet worksheet = workbook.getWorksheets().get(0); Cells cells = worksheet.getCells(); // 在模板中定义Smart Markers cells.replace("{data}", jsonData); // 保存Excel文件 workbook.save(outputPath, SaveFormat.XLSX); } } ``` 你可以将上述代码中的`jsonData`替换为你的JSON数据,`templatePath`替换为你的Excel模板路径,`outputPath`替换为你想要保存的Excel文件路径。然后调用`exportToExcel`方法即可将JSON数据导出到Excel中。 希望这个例子能帮到你。如果你需要更多关于Aspose.Cells的信息,请访问官方文档\[1\]。 #### 引用[.reference_title] - *1* *2* [用ASPOSE.Cells将HTML表格存为Excel](https://blog.csdn.net/weixin_34337134/article/details/118263891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用Aspose.Cells导出excel](https://blog.csdn.net/rxbtalent/article/details/99818241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值