我已经将此代码应用于工作表中的“标题”(大页首“标题”):
// 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会突出显示,但是没有内容。
我错过了一个至关重要的步骤,还是完全错了?
答案 0 :(得分:1)
你在做什么在逻辑上很好。
这一行
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文件中,你应该逐个单元地进行。它甚至不支持常规(未命名)范围。
答案 1 :(得分: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);