0

我正在尝试使用#officewriter #excelwriter 创建一个简单的示例,并且在使用样式时遇到了麻烦。不知道为什么。

ExcelApplication XLAPP = new ExcelApplication();
Workbook WB = XLAPP.Create(); 
Worksheet WKST = WB.Worksheets[0];
DataSet ds = <...some valid dataset with 2 columns....>
DataView dv = ds.Tables[0].DefaultView;
DataImportProperties props = WB.CreateDataImportProperties();
SoftArtisans.OfficeWriter.ExcelWriter.Style dataStyle = WB.CreateStyle();
props.UseColumnNames = true;
dataStyle.BackgroundColor = Color.SystemColor.Red;
dataStyle.CellLocked = true;                 
Area importArea = WKST.ImportData(dv, WKST.Cells[0, 0],props);
importArea.ApplyStyle(dataStyle);
XLAPP.Save(WB, Page.Response, "Output.xls", false);

这是问题所在:颜色样式在输出中有效,但 CellLocked 样式无效。为什么?

谢谢你的帮助。沮丧 - 我认为这是一个简单的例子!

4

1 回答 1

2

ExcelWriter 旨在模仿 Excel,因此通常需要在 Excel 中执行以激活某些属性的步骤与在 ExcelWriter 中需要执行的步骤相同。

在 Excel 中,工作表中的所有单元格都设置了锁定样式属性,但该属性在工作表受到保护之前不会生效。(右键单击一个单元格并转到Format Cells > Protection -检查Locked属性,但在您转到Review > Protect Sheet之前单元格不会被锁定)。

同样,在 ExcelWriter 中,Worksheet.Cells中的所有单元格的Style.CellLocked默认设置为true ,但该属性在调用Worksheet.Protect()之前不会生效。保护工作表后,应锁定单元格。

ExcelApplication xlapp = new ExcelApplication();
Workbook wb = xlapp.Create(ExcelApplication.FileFormat.Xlsx);
Worksheet ws = wb.Worksheets["Sheet1"];

//Currently, all the cells have default "locked" style set to true
//Protecting the worksheet will activate this property
ws.Protect("MyPassword");

xlapp.Save(wb, "ProtectedWorksheet.xlsx");

由于所有单元格默认为Locked,因此如果您只想锁定单元格区域而不是整个工作表,则需要在任何要保持解锁状态的单元格上将 Style.CellLocked 设置为false 。当工作表受到保护时,这些单元格将保持可编辑状态。

ExcelApplication xlapp = new ExcelApplication();
Workbook wb = xlapp.Open("MyWorkbook.xlsx");
Worksheet ws = wb.Worksheets[0];

//Create a style that will leave certain cells unlocked 
//when the worksheet is protected
Style unlockStyle = wb.CreateStyle();
unlockStyle.CellLocked = false;

//Select the area that will be left unprotected
//Apply the style to that area
Area unlockedArea = ws.PopulatedCells;
unlockedArea.ApplyStyle(unlockStyle);

//Protect the worksheet
ws.Protect("MyPassword");

xlapp.Save(wb, "MyNewWorkbook.xlsx");

有关保护工作表的更多信息,我们的文档中有一个指南:保护您的工作表

注意:我为 OfficeWriter 的制造商 SoftArtisans 工作。

于 2013-09-20T11:59:55.610 回答