为什么我的 "defined name"(范围)值未使用此 Spreadsheet Light 代码设置?

Why is my "defined name" (range) value not being set with this Spreadsheet Light code?

我有这段代码可以将 "header"(大的,顶级的 sheet "title")应用到 sheet:

// 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:$A"); 
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 突出显示,但没有内容。

我是错过了关键的一步,还是完全错了?

你这样做在逻辑上是没问题的。

这一行

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

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

或名称管理员:

问题在于 Spreadsheet Light 对定义的名称具有非常基本的支持 - 基本上您所能做的就是创建一个名称并在公式中使用它。所有操作内容的方法都需要单个单元格引用。顺便说一句,如果您没有传递有效的单元格引用,所有这些方法都不会抛出异常,但是 return bool 表示 success/failure.

例如,如果您将代码更改为

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

你会看到两个 success 变量都是 false.

简而言之,如果您想将一些内容添加到 Excel 文件中,您应该逐个单元格地进行。它甚至不支持常规(未命名)范围。

至少从理论上讲,您可以这样做:

// from 
var stats = sl.GetWorksheetStatistics();
var rowcount = stats.NumberOfRows;

SLStyle entireSheetRangeStyle = sl.CreateStyle();
entireSheetRangeStyle.// (set style vals)
. . .
sl.SetRowStyle(1, rowcount, entireSheetRangeStyle);