为什么我的 "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);
我有这段代码可以将 "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);