C# 删除单元格区域后,使用Aspose工具保存工作簿时出错

C# 删除单元格区域后,使用Aspose工具保存工作簿时出错,c#,excel,aspose,aspose-cells,C#,Excel,Aspose,Aspose Cells,在保存工作簿之前,我正在删除工作表中的一个区域(我使用了ClearContents、DeleteRange、ClearRange)。但它不断给出错误“指定的参数超出了有效值的范围” 但是,如果我删除删除代码并尝试保存,它可以正常工作..请建议。。 我的代码是这样的: foreach (GcmTemplateWorksheets _worksheet in Worksheetdetails) { if (_worksheet.IsTransposeRequi

在保存工作簿之前,我正在删除工作表中的一个区域(我使用了ClearContents、DeleteRange、ClearRange)。但它不断给出错误“指定的参数超出了有效值的范围” 但是,如果我删除删除代码并尝试保存,它可以正常工作..请建议。。 我的代码是这样的:

foreach (GcmTemplateWorksheets _worksheet in Worksheetdetails)
        {
            if (_worksheet.IsTransposeRequired ?? false)
            {
                Range maxRange = _workbook.Worksheets[_worksheet.WorksheetName].Cells.MaxDisplayRange;
                _workbook.Worksheets[_worksheet.WorksheetName].Cells.ClearRange((int)_worksheet.StartRow, (int)_worksheet.StartColumn, maxRange.RowCount, maxRange.ColumnCount);
            }
            _workbook.Worksheets[_worksheet.WorksheetName].Cells.ImportDataTable(data_.Tables[_worksheet.FixedWorksheetName], false, _worksheet.ExportDataStartRow ?? 0, 0);
            //Instantiate the error checking options
            ErrorCheckOptionCollection opts = _workbook.Worksheets[_worksheet.WorksheetName].ErrorCheckOptions;
            int index = opts.Add();
            ErrorCheckOption opt = opts[index];
            //Disable the numbers stored as text option
            opt.SetErrorCheck(ErrorCheckType.TextNumber, false);
            opt.AddRange(CellArea.CreateCellArea(0, 0, _workbook.Worksheets[_worksheet.WorksheetName].Cells.MaxDataRow, _workbook.Worksheets[_worksheet.WorksheetName].Cells.MaxDataColumn));
        }
             string _exportPath = System.Configuration.ConfigurationManager.AppSettings["ExportTemplatePath"].ToString();
        //Save the worksheet at an appropriate configured location and assign path to _exportPath..
        _workbook.Save(_exportPath);
        return _exportPath;

我已经测试了这个场景,在测试期间,我不得不相应地更新您的代码(因为有些对象/指针或其他选项的值我不确定。因此,我必须使用一个虚拟数据表和其他相应的对象/值)来使用我的示例输入文件(Book1.xlsx)测试他的案例使用我们最新的版本/修复程序:根据我的观察,它工作得非常好。我没有发现任何问题

以下是我在v7.3.2.5中完整的可运行示例代码(请建议用户尝试):

示例代码:

DataTable dt = new DataTable();
dt.Columns.Add("Column1", typeof(int));
dt.Columns.Add("Column2", typeof(string));
dt.Columns.Add("Column3", typeof(int));
for (int i = 0; i < 100; i++)
{
    dt.Rows.Add(i / 10 + 1, "Item " + i.ToString(), i);
}
Workbook _workbook = new Workbook(@"e:\test2\book1.xlsx");
Worksheet _worksheet = _workbook.Worksheets[0];
Range maxRange = _workbook.Worksheets[_worksheet.Name].Cells.MaxDisplayRange;
//workbook.Worksheets[_worksheet.WorksheetName].Cells.ClearRange((int)_worksheet.StartRow, (int)_worksheet.StartColumn, maxRange.RowCount, maxRange.ColumnCount);
_workbook.Worksheets[_worksheet.Name].Cells.ClearRange((int)maxRange.FirstRow, (int)maxRange.FirstColumn, maxRange.RowCount, maxRange.ColumnCount);
//workbook.Worksheets[_worksheet.WorksheetName].Cells.ImportDataTable(data.Tables[_worksheet.FixedWorksheetName], false, _worksheet.ExportDataStartRow ?? 0, 0)
_workbook.Worksheets[_worksheet.Name].Cells.ImportDataTable(dt, false, 0, 0);
//Instantiate the error checking options
ErrorCheckOptionCollection opts = _workbook.Worksheets[_worksheet.Name].ErrorCheckOptions;

int index = opts.Add();
ErrorCheckOption opt = opts[index];
//Disable the numbers stored as text option
opt.SetErrorCheck(ErrorCheckType.TextNumber, false);
opt.AddRange(CellArea.CreateCellArea(0, 0, _workbook.Worksheets[_worksheet.Name].Cells.MaxDataRow, _workbook.Worksheets[_worksheet.Name].Cells.MaxDataColumn));
string _exportPath = @"e:\test2\ouput_book1.xlsx";
//Save the worksheet at an appropriate configured location and assign path to _exportPath..
_workbook.Save(_exportPath);
DataTable dt=newdatatable();
添加(“第1列”,类型(int));
dt.Columns.Add(“Column2”,typeof(string));
添加(“第3列”,类型(int));
对于(int i=0;i<100;i++)
{
添加(i/10+1,“项”+i.ToString(),i);
}
工作簿\工作簿=新工作簿(@“e:\test2\book1.xlsx”);
工作表_工作表=_工作簿。工作表[0];
Range maxRange=\u工作簿.工作表[\u工作表.名称].Cells.MaxDisplayRange;
//workbook.Worksheets[\u worksheet.WorksheetName].Cells.ClearRange((int)\u worksheet.StartRow,(int)\u worksheet.StartColumn,maxRange.RowCount,maxRange.ColumnCount);
_workbook.Worksheets[\u worksheet.Name].Cells.ClearRange((int)maxRange.FirstRow,(int)maxRange.FirstColumn,maxRange.RowCount,maxRange.ColumnCount);
//workbook.Worksheets[\u worksheet.WorksheetName].Cells.ImportDataTable(data.Tables[\u worksheet.FixedWorksheetName],false,\u worksheet.ExportDataStartRow??0,0)
_workbook.Worksheets[\u worksheet.Name].Cells.ImportDataTable(dt,false,0,0);
//实例化错误检查选项
ErrorCheckOptionCollection选项=_工作簿.工作表[_工作表.名称].ErrorCheckOptions;
int index=opts.Add();
ErrorCheckOption opt=opts[index];
//禁用存储为文本的数字选项
opt.SetErrorCheck(ErrorCheckType.TextNumber,false);
opt.AddRange(Cellea.CreateCellea(0,0,_工作簿.工作表[_工作表.名称].Cells.MaxDataRow,_工作簿.工作表[_工作表.名称].Cells.MaxDataColumn));
字符串\u exportPath=@“e:\test2\output\u book1.xlsx”;
//将工作表保存在适当的配置位置,并将路径分配给_exportPath。。
_工作簿。保存(_exportPath);

为供参考,我还附上了资源文件(,)。如果您在最新版本中仍然面临任何问题,请您共享一个可运行的代码/控制台应用程序(他可能也会动态使用一些虚拟数据表)以在我们这端重现该问题。您也可以在中发布查询。

感谢您生动的回答。。我发现我在某种程度上向ClearRange方法传递了错误的参数,这使得工作簿最终无法保存。。