Я даже не уверен, что использую правильную терминологию; Я буду обновлять вопрос и название по мере необходимости.
Я использую OpenXmlSDK для заполнения ранее существующего файла Excel 2010 .xlsm
- листа с поддержкой макросов.
Я могу получить доступ к рабочим листам и ячейкам достаточно хорошо.
Однако я не могу понять, как получить доступ или обновить данные в ячейке, которая является выпадающим элементом управления, который получает значения из диапазона на другом листе.
Он помечен как «H13» на листе, и щелкните правой кнопкой мыши >> элемент управления форматом показывает
Input range: 'anotherWorksheet'!$N$3:$N$54
Cell link: 'anotherWorksheet'!$M$3
Всякий раз, когда я пытаюсь получить ссылку на эту ячейку, я не могу ее найти - я получаю null
значение
Я пробовал два метода доступа:
Я даже не уверен, что использую правильную терминологию; Я буду обновлять вопрос и заголовок по мере необходимости.
Я использую OpenXmlSDK для заполнения уже существующего файла Excel 2010 .xlsm
- листа с поддержкой макросов.
Я могу получить доступ к рабочим листам и ячейкам достаточно хорошо.
Однако я не могу понять, как получить доступ или обновить данные в ячейке, которая является выпадающим элементом управления, который получает значения из диапазона на другом листе.
Он помечен как «H13» на рабочем листе, и щелкните правой кнопкой мыши >> элемент управления форматом показывает
Input range: 'anotherWorksheet'!$N$3:$N$54
Cell link: 'anotherWorksheet'!$M$3
Всякий раз, когда я пытаюсь получить ссылку на эту ячейку, я не могу ее найти - я получаю null
значение
Я пробовал два метода доступа:
// http://msdn.microsoft.com/en-us/library/ff921204.aspx
private static Cell GetCell(Worksheet worksheet, string addressName)
{
return worksheet.Descendants<Cell>().Where(
c => c.CellReference == addressName).FirstOrDefault();
}
и
// Given a worksheet, a column name, and a row index,
// gets the cell at the specified column and
// /615125/open-xml-sdk-2-0-kak-obnovit-yacheiku-v-elektronnoi-tablitse
private static Cell GetCell(Worksheet worksheet, string columnName, uint rowIndex)
{
Row row = GetRow(worksheet, rowIndex);
if (row == null)
return null;
return row.Elements<Cell>().Where(c => string.Compare
(c.CellReference.Value, columnName +
rowIndex, true) == 0).FirstOrDefault();
}
// Given a worksheet and a row index, return the row.
private static Row GetRow(Worksheet worksheet, uint rowIndex)
{
return worksheet.GetFirstChild<SheetData>().
Elements<Row>().Where(r => r.RowIndex == rowIndex).First();
}
Оба дают null
для целевой ячейки H13
, но предоставляют ссылки на окружающие ячейки (т. Е. `H12, H14, G13 '
На самом деле, I13
также дает null
, но эта ячейка не заполнена ничем. Однако, если я не могу получить ссылку, как я могу заполнить ее с помощью SDK? Не моя главная мысль, здесь.
Я буду получать данные, которые будут соответствовать одной из записей в раскрывающемся списке; Мне просто нужно заполнить / выбрать эту конкретную запись в целевой таблице.
Как я могу сделать это с OpenXmlSDK? Я пытался использовать различные библиотеки с открытым исходным кодом, но, похоже, ни одна не поддерживает файлы .xslm
(файл, предоставленный клиентом, и его нельзя использовать в другом формате; макросы должны выполняться при запуске и т. Д.).
Хотя я использую C #, так как мой вопрос касается OpenXmlSDK, я бы принял ответы на других языках, используя эту платформу.