【问题标题】:How to fill data validation dropdown based of other sheet?如何根据其他表格填写数据验证下拉列表?
【发布时间】:2020-11-16 18:47:10
【问题描述】:


我有两张纸,我想将数据验证添加到第一列并根据第一张纸第一列填充其值。 这是我的代码:

using (SpreadsheetDocument myDoc = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook))
            {
                WorkbookPart workbookPart = myDoc.AddWorkbookPart();
                workbookPart.Workbook = new Workbook();

                Sheets sheets = myDoc.WorkbookPart.Workbook.AppendChild(new Sheets());

                // the data for sheet 1
                WorksheetPart worksheetPart1 = workbookPart.AddNewPart<WorksheetPart>();
                Worksheet workSheet1 = new Worksheet();
                SheetData sheetData1 = new SheetData();

                workSheet1.AppendChild(sheetData1);
                worksheetPart1.Worksheet = workSheet1;

                Sheet sheet1 = new Sheet()
                {
                    Id = myDoc.WorkbookPart.GetIdOfPart(worksheetPart1),
                    SheetId = 1,
                    Name = "Sheet1"
                };
                sheets.Append(sheet1);


                // the data for sheet 2
                WorksheetPart worksheetPart2 = workbookPart.AddNewPart<WorksheetPart>();
                Worksheet workSheet2 = new Worksheet();
                SheetData sheetData2 = new SheetData();

                workSheet2.AppendChild(sheetData2);
                worksheetPart2.Worksheet = workSheet2;

                Sheet sheet2 = new Sheet()
                {
                    Id = myDoc.WorkbookPart.GetIdOfPart(worksheetPart2),
                    SheetId = 2,
                    Name = "Sheet2"
                };
                sheets.Append(sheet2);

                DataValidations dataValidations = new DataValidations();
                DataValidation dataValidation = new DataValidation()
                {
                    Type = DataValidationValues.List,
                    AllowBlank = true,
                    SequenceOfReferences = new ListValue<StringValue>() { InnerText = "A:A" }
                };
                Formula1 data = new Formula1();
                data.Text = $"\"=Sheet1!$A:$A\"";
                dataValidation.Append(data);
                dataValidations.Append(dataValidation);

                worksheetPart2.Worksheet.AppendChild(dataValidations);
            }

我的问题是,当设置 data.TEXT 等于 $""=Sheet1!$A:$A"" 时,它只会在下拉列表中显示一个包含一行的列表。
我想在工作表 1 的第一列中获取值并根据它在工作表 2 中填写下拉列表

【问题讨论】:

  • 不确定您是否使用 EPPlus。但是在那里你不能将验证范围添加为字符串。您必须使用地址。也许这里也是如此。如果您确实使用 EPPlus,这可能会有所帮助:stackoverflow.com/questions/53600471/…
  • 我正在使用 OpenXML @VDWWD

标签: c# asp.net excel asp.net-core openxml


【解决方案1】:

只需稍加改动,您的代码就对我有用。只需删除内部引号。

data.Text = $"=Sheet1!$A:$A";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多