2

我有这段代码可以将“标题”(大的,顶部的“标题”)应用于工作表:

// 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 突出显示,但没有内容。

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

4

2 回答 2

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 文件中,您应该逐个单元格地进行。它甚至不支持常规(未命名)范围。

于 2016-04-01T18:08:02.390 回答
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);
于 2016-04-07T17:54:00.770 回答