我有一个电子表格,在工作表上的各个单元格中有多个复选框,我需要从c#程序中获取(已选中/未选中)的值。
我正在使用OpenXML SDK v2.5和相关的工具箱。
使用工具箱我可以看到复选框控件作为AlternateControlParts集合的一部分。这些不是ActiveX复选框,而是通过Excel中的开发人员选项卡添加的表单控件。
当我使用SDK时,我也可以看到WorkSheetPart,其上有一个ControlPropertiesParts集合,其中列出了所有复选框。
我的问题是,如何找到哪个复选框位于哪个单元格中,或者至少与哪个单元格相关?
我也找到了这个系列 wsPart.ControlPropertiesParts.First()。DrawingsPart .WorkSheetDrawing.DrawingsPart.WorkSheetDrawing
此集合似乎具有每个复选框的备用内容,如果我进一步向下钻取,我可以找到似乎给出相对于工作表上的单元格的复选框位置的锚点。但是,col和行Id看起来并不完全匹配,我怀疑Offset值也可能与它有关。
如果有人能指出我如何将复选框映射到正确的行/单元格,我将非常感激。
感谢您的帮助。
此致 保罗
答案 0 :(得分:1)
我有一个解决方案,它只包含逻辑(自Office 2010以来,属性FormControlProperties
可用:
SpreadsheetDocument document;
string sheetName = "sheetName";
string controlName = "Option Button 5";
...
var wbPart = document.WorkbookPart;
var theSheet = wbPart.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Name == sheetName);
var wsPart = (WorksheetPart)wbPart.GetPartById(theSheet.Id);
var control = wsPart.Worksheet.Descendants<DocumentFormat.OpenXml.Spreadsheet.Control>().FirstOrDefault(c => c.Name == controlName);
var controlProperies = (ControlPropertiesPart)wsPart.GetPartById(control.Id);
bool isChecked = controlProperies.FormControlProperties.Checked == "Checked";
但是,如果可以编辑excel文件,将FormControl值映射到单元格并读取单元格值会更简单。