OpenXml使用DataValidations创建电子表格

时间:2017-05-15 18:38:53

标签: openxml

我正在使用DocumentFormat.OpenXml 2.5版.Net 4.5.2。我创建了一个包含两个表格的工作簿。第二个工作表为第一个工作表中的数据验证提供查找数据。当我完成第二张表格时,我会执行以下操作来连接它们:

    var sheet = workbookpart.WorksheetParts.First().Worksheet;

        var extLst = new WorksheetExtensionList();
        var ext = new WorksheetExtension();

        var dataValidations = new DataValidations();

        dataValidations.Count = 2;

        var jobSplit1dataValidation = new DataValidation
        {
            Type = DataValidationValues.List,
            AllowBlank = true,
            SequenceOfReferences =
                new ListValue<StringValue>() { InnerText = "K2:K990" },
            Formula1 = new Formula1("JobSplitLookup!$A$2:$A$6")
        };

        var jobSplit2dataValidation = new DataValidation
        {
            Type = DataValidationValues.List,
            AllowBlank = true,
            SequenceOfReferences =
                new ListValue<StringValue>() { InnerText = "L2:L990" },
            Formula1 = new Formula1("JobSplitLookup!$B$2:$B$5")
        };

        dataValidations.Append(jobSplit1dataValidation, jobSplit2dataValidation);

        ext.Append(dataValidations);

        extLst.Append(ext);

        sheet.Append(extLst);

当我构建电子表格并查看部件时,我在第一张表中看到了这些数据验证,我在第二张表中看到了数据。一切看起来都很合适。但是,在第一张表中,当我选择适用的单元格时,数据验证无效。

为了比较,我手动添加了数据验证并检查了xml。它是不同的,因为有一些命名空间应用于ext和dataValidations元素,而formula1节点有&#34; f&#34;和&#34; sqref&#34;子元素,而OpenXml生成sqref作为dataValidation的属性,而formula1的内部文本是对范围的引用。

必须(至少)一件我忽略的事情。它会跳出来吗?

0 个答案:

没有答案