为什么我的“已定义的名称”(范围)值没有使用此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); 

注:我validation了“Sheet1”是正确的这个代码:

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

该文件创build并保存,但没有内容; 当我打开它时,单元格A1被突出显示,但是无内容。

我错过了一个至关重要的步骤,还是完全错误?

你在做什么在逻辑上是好的。

这条线

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

确实创build了一个命名范围。 如果您在Excel中打开生成的文件并查看单元格select器,则可以看到它:

在这里输入图像说明

或名称pipe理器:

在这里输入图像说明

问题是,Spreadsheet Light对Defined names有一个非常基本的支持 – 基本上,你所能做的就是创build一个名字并在公式中使用它。 所有操作内容的方法都需要单元格引用。 顺便说一句,所有这些方法不会抛出exception,如果你不通过一个有效的单元格引用,但返回bool指示成功/失败。

例如,如果你改变你的代码

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

你会看到两个successvariables都是false

不久之后,如果你想把一些内容带到Excel文件中,你应该逐一进行。 它甚至不支持常规(未命名)范围。

理论上,至less,你可以这样做:

 // 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);