如何使用Aspose加速工作簿创建?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Aspose加速工作簿创建?相关的知识,希望对你有一定的参考价值。

我正在编写一些代码,我必须打开excel,更改一些单元格值,然后重新计算整个文件的公式,以获得两个特定值并通知它们。

问题是我必须使用大量文件,所有文件都有不同的名称和不同的路径,并且每次都需要花费太多时间来创建工作簿。

即使只使用一个excel也需要几秒钟来处理,最重要的是创建工作簿对象。

有没有办法加快这个过程?

这是我的代码:

class Program

    private class MyWorkbook : IDisposable
    
        public Workbook Wb  get; set; 
        public MyWorkbook(Workbook wb)
        
            Wb = wb;
        

        public void Dispose()
        

        
    

    static void Main(string[] args)
    
        Console.WriteLine("Started: " + DateTime.Now.ToString());

        int i = 0;
        while (i <= 10000)
        
            using (MyWorkbook workbook = new MyWorkbook(new Workbook(@"C:\AppData\MyExcels\abcdefg.xlsm")))
            
                workbook.Wb.Settings.CreateCalcChain = false;
                workbook.Wb.Worksheets[1].Cells["M21"].Value = 5;
                workbook.Wb.Worksheets[1].Cells["M22"].Value = 5;
                workbook.Wb.Worksheets[1].Cells["M23"].Value = 5;
                workbook.Wb.CalculateFormula();
          Console.WriteLine(workbook.Wb.Worksheets[1].Cells["L81"].Value);
            
            Console.WriteLine("Index: " + i);
            i++;
        
        Console.WriteLine("Finished: " + DateTime.Now.ToString());
        Console.ReadLine();
    

注意:我使用自定义类,因为Aspose版本是旧的,而Workbook没有Dispose()方法。

谢谢。

答案

首先,我们建议您尝试使用我们的最新版本,因为它在读取或写入文件时有更多关于内存管理和时间消耗的增强和修复。您是否发现Aspose.Cells需要更多时间来实例化工作簿,或者它还在计算工作簿中的公式时花费更多时间?我猜你可能会尝试一些措施来降低内存成本并加快进程。

  1. 如果在通过API打开文件时进程花费更多时间并消耗更多内存,则可以尝试设置MemorySetting.MemoryPreference选项以优化单元数据的内存使用并降低总体内存成本。因此,它可以提高过程的速度。请参阅示例代码段以供参考:例如示例代码: LoadOptions opt = new LoadOptions(); // Set the memory preferences opt.MemorySetting = MemorySetting.MemoryPreference; // Instantiate the Workbook // Load the Big Excel file having large Data set in it Workbook wb = new Workbook(dataDir+ "Book1.xlsx", opt);
  2. 在加载工作簿时尝试使用一些数据过滤选项。例如,请参阅document,了解如何在加载工作簿时过滤数据/内容或对象。
  3. 尝试加载所需的工作表,不要在工作簿中加载不必要的工作表。这可以提高性能并减少内存消耗。在处理由许多工作表组成的大型工作簿时,此方法很有用。例如代码: //定义一个新的工作簿。 Workbook workbook; // Load the workbook with the spcified worksheet only. LoadOptions loadOptions = new LoadOptions(LoadFormat.Xlsx); loadOptions.LoadFilter = new CustomLoad(); // Creat the workbook. workbook = new Workbook(dataDir+ "TestData.xlsx", loadOptions); // Perform your desired task. // Save the workbook. workbook.Save(dataDir+ "outputFile.out.xlsx"); .... Here is the implementation of the CustomLoad class. ........ class CustomLoad : LoadFilter public override void StartSheet(Worksheet sheet) if (sheet.Name == "Sheet2") // Load everything from worksheet "Sheet2" this.LoadDataFilterOptions = LoadDataFilterOptions.All; else // Load nothing this.LoadDataFilterOptions = LoadDataFilterOptions.None;

PS。我是Aspose的支持开发人员/传播者。

以上是关于如何使用Aspose加速工作簿创建?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建工作簿?

如何创建一个 Excel 电子表格,通过仅对正确用户启用的按钮提供指向工作簿的链接?

如何创建指向同一工作簿中的其他Excel工作表的超链接

如何获取当前打开的excel工作簿的本地路径?

如何使用spire.xls来将excel转换为pdf文件

使用 Perl/GD 创建图像并将其直接插入到 Excel 工作簿中?