2016-06-14 59 views
1

我有一个电子表格,在工作表的各个单元格中有多个复选框,我需要从ac#中获取(选中/取消选中)的值程序。如何使用OpenXML SDK访问Excel工作表中的FormControl复选框

我使用OpenXML SDK v2.5和相关的工具箱。

使用工具箱,我可以看到复选框控件作为AlternateControlParts集合的一部分。这些不是ActiveX复选框,而是通过Excel中的开发人员选项卡添加的表单控件。

当我使用SDK时,我还可以看到WorkSheetPart上有一个ControlPropertiesParts集合,其中列出了所有的复选框。

我的问题是,我怎么找到哪个复选框是在哪个单元格中,或者至少与哪个单元格有关?

我还发现收集 wsPart.ControlPropertiesParts.First()。DrawingsPart .WorkSheetDrawing.DrawingsPart.WorkSheetDrawing

此集合似乎有各复选框的替代内容,并且如果我进一步深入我可以找到显示复选框相对于工作表上单元格的位置的锚点。但是,列和行ID似乎并不完全匹配,我怀疑偏移值也可能与它有关。

如果有人能指出我正确的方向如何将复选框映射到正确的行/单元格,我将非常感激。

谢谢你的帮助。

问候 保罗

+0

您是否找到任何解决方案? – jannagy02

回答

0

我有一个解决方案,它不仅包含了逻辑(该物业FormControlProperties是因为Office 2010中提供:

 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<Control>().FirstOrDefault(c => c.Name == controlName); 
     var controlProperies = (ControlPropertiesPart)wsPart.GetPartById(control.Id); 
     bool isChecked = controlProperies.FormControlProperties.Checked == "Checked"; 

但它是simplier到FormControl值映射到一个细胞并读取单元格值,如果您可以编辑excel文件。

+0

这对我无效wsPart.Worksheet.Descendants ()为空。 – Elmue

相关问题