Почему мое значение "определенного имени" (диапазона) не устанавливается с помощью кода Ligh t Spreadsheet Light?

У меня есть этот код, чтобы применить "заголовок" (большой, верхний из "заголовок") к листу:

// Initialize
private static SLDocument sl;
. . .
sl = new SLDocument();

// Create a Style
SLStyle styleHeading = sl.CreateStyle();
styleHeading.SetFont(FontSchemeValues.Major, 36);
styleHeading.Font.Italic = true;
styleHeading.Font.FontName = "Candara";

// Create a Defined Name (Range) and give it a value and style
sl.SetDefinedName("UnitName", "Sheet1!$A$1:$A$13"); 
sl.SetCellValue("UnitName", "Pennsylvania Platypi Presumptuously Parasailing");
sl.SetCellStyle("UnitName", styleHeading);

// Save the sheet
string appDataFolder = HttpContext.Current.Server.MapPath("~/App_Data/");
string spreadsheetLightFilename = "PlatypiTest.xlsx";
string fullspreadsheetLightPath = Path.Combine(appDataFolder, spreadsheetLightFilename);
sl.SaveAs(fullspreadsheetLightPath);

Примечание: я подтвердил, что "Sheet1" был прав с этим кодом:

var nameList = sl.GetSheetNames();
string s = nameList[0]; // "s" is "Sheet1"

Файл создан и сохранен, но в нем нет содержимого; когда я открываю его, ячейка A1 выделяется, но не содержит содержимого.

Я пропускаю жизненно важный шаг или поступаю совершенно неправильно?

2 ответа

Решение

То, что вы делаете, логично хорошо.

Эта линия

sl.SetDefinedName("UnitName", "Sheet1!$A$1:$A$13"); 

действительно создает именованный диапазон. Вы можете увидеть это, если откроете полученный файл в Excel и посмотрите на селектор ячеек:

введите описание изображения здесь

или менеджер имен:

введите описание изображения здесь

Проблема заключается в том, что Spreadsheet Light имеет очень простую поддержку для Определенных имен - в основном, все, что вы можете сделать, - это создать имя и использовать его внутри формул. Все методы, которые манипулируют контентом, ожидают ссылки на одну ячейку. Кстати, все эти методы не выдают исключение, если вы не передаете действительную ссылку на ячейку, а возвращаете bool указывая на успех / неудачу.

Например, если вы измените свой код на

bool success1 = sl.SetCellValue("UnitName", "Pennsylvania Platypi Presumptuously Parasailing");
bool success2 = sl.SetCellStyle("UnitName", styleHeading);

вы увидите, что оба success переменные false,

Вкратце, если вы хотите перенести некоторый контент в файл Excel, вы должны делать это по ячейкам. Он даже не поддерживает регулярные (безымянные) диапазоны.

Теоретически, по крайней мере, вы могли бы сделать это так:

// from http://stackru.com/questions/36481802/what-is-the-analogue-to-excel-interops-worksheet-usedrange-rows-in-spreadsheet
var stats = sl.GetWorksheetStatistics();
var rowcount = stats.NumberOfRows;

SLStyle entireSheetRangeStyle = sl.CreateStyle();
entireSheetRangeStyle.// (set style vals)
. . .
sl.SetRowStyle(1, rowcount, entireSheetRangeStyle);
Другие вопросы по тегам