【问题标题】:Error adding Data Validation List to Excel With OfficeOpenXml使用 OfficeOpenXml 将数据验证列表添加到 Excel 时出错
【发布时间】:2022-06-11 19:22:40
【问题描述】:

我正在尝试在 D365fo 上使用 OfficeOpenXml 将数据验证列表添加到 Excel,但是当分配公式时,它会抛出错误。

worksheetTo = packageTo.get_Workbook().get_Worksheets().get_Item(1);
cellsTo = worksheetTo.Cells.get_Item(2, 2, totalRows, 2);
validation = worksheetTo.DataValidations.AddListValidation("B:B");
OfficeOpenXml.Datavalidation.Formulas.Contracts.IExcelDataValidationFormula formula = validation.Formula;
formula.ExcelFormula = "=Feuil2!$A:$A";

packageTo.Save();
file::SendFileToUser(streamTo, strDel(textFile, strLen(textFile) -4, 5) + "T.xlsx");

错误信息:

用户未处理的异常

System.MethodAccessException:“尝试通过方法“Dynamics.AX.Application.GMExcelTransformation.`run()”访问方法“OfficeOpenXml.DataValidation.ExcelDataValidationWithFormula`1.set_Formula(System._Canon)”失败.'

验证变量是OfficeOpenXml.DataValidation.ExcelDataValidationList;

【问题讨论】:

  • 请提供一个最小的例子来说明问题。如果可能的话,使用一个可运行的类。

标签: axapta epplus x++ dynamics-365-operations


【解决方案1】:

我不确定是什么导致了问题中的异常。以下代码有效,因此可能是由问题中未显示的内容引起的。

using OfficeOpenXml;

class SOCreateExcelWithListValidation
{
    public static void main(Args _args)
    {
        using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
        {
            using (var package = new ExcelPackage(stream))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add('ListValidation');
                
                // add some values that can be validated
                ExcelRange cell = worksheet.Cells.get_Item('A1');
                cell.Value = 'Value1';
                cell = worksheet.Cells.get_Item('A2');
                cell.Value = 'Value2';
                cell = worksheet.Cells.get_Item('A3');
                cell.Value = 'Value3';

                // add validation
                DataValidation.ExcelDataValidationList validation;
                validation = worksheet.DataValidations.AddListValidation("B:B");
                DataValidation.Formulas.Contracts.IExcelDataValidationFormula formula;
                formula = validation.Formula;
                formula.ExcelFormula = "=ListValidation!$A:$A";
                
                package.Save();
            }
            File::SendFileToUser(stream, 'ListValidation.xlsx');
        }
    }

}

生成的 Excel 文件如下所示:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多