如何根据其他 sheet 填写数据验证下拉列表?
How to fill data validation dropdown based of other sheet?
我有两个 sheet,我想将数据验证添加到第一列,并根据第一个 sheet 的第一列填充它的值。
这是我的代码:
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"" 时,它只显示了一个包含一行的列表在下拉列表中。
我想在 sheet1 的第一列中获取值并根据它在 sheet2 中填写下拉列表
只需稍作改动,您的代码就适用于我。只需删除内部引号。
data.Text = $"=Sheet1!$A:$A";
我有两个 sheet,我想将数据验证添加到第一列,并根据第一个 sheet 的第一列填充它的值。
这是我的代码:
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"" 时,它只显示了一个包含一行的列表在下拉列表中。
我想在 sheet1 的第一列中获取值并根据它在 sheet2 中填写下拉列表
只需稍作改动,您的代码就适用于我。只需删除内部引号。
data.Text = $"=Sheet1!$A:$A";