2016-03-30 8 views
2

Я получил этот код, чтобы применить «заголовок» (большой, топ-оф-лист «заголовка») на листе:Почему мое значение «определенное имя» (диапазон) не задается с помощью этого кода Light 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); 

Примечание: Я проверил, что «Лист1» был прав с этот код:

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

файл является создан и сохранен, но она лишена содержания; Когда я его открываю, ячейка A1 подсвечивается, но без содержания.

Я пропустил жизненно важный шаг, или об этом совершенно неправильно?

ответ

1

Что вы делаете, это логично.

Эта линия

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

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

enter image description here

или Имя менеджера:

enter image description here

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

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

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

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

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

0

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

// from http://stackoverflow.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);