我正在为SharePoint 2013中的ItemAdded编写事件接收器。我正在使用OpenXML来读取电子表格。 当我尝试以编程方式打开驻留在SharePoint库中的日志文件时,出现以下错误: 文件包含损坏的数据 抛出这个错误的代码块是: using (SpreadsheetDocument spreadsheet = SpreadsheetDocument.Open(mstream, false)) using (SpreadsheetDocument logsheet = SpreadsheetDocument.Open(logstream, false)) 第一行传递正常,第二行(日志)中断。 他们都是从stream中读取。 电子表格是在事件触发时添加的项目,日志表是SharePoint中当前存在的项目。 使用以下path从数据stream打开电子表格: string workbookpath = properties.ListItem.Web.Url + "/" + properties.ListItem.File.Url; 并使用SharePoint中的直接URL使用数据stream打开日志表 string logFilePath = "http://SPSiteName/sites/SP/Dropbox/RuntimeLog.xml"; 任何帮助或见解,非常感谢。
我有一个项目使用以下三个库来访问XLSM文档 打开XML 封闭的XML 电子表格灯 我现在想要创build一个表单控件(一个button),将有一个macros分配给它(只是一个公共职能,我用VBA创build)。 我该怎么做呢? 一个图书馆比另一个更好吗? (或者让他们中的任何一个让我除了Open XML之外) 我正在使用C#如果任何人使用特定的语法:)
我正在处理一个.xlsm文件,并需要知道如何使用另一张表上的列表来使用openXML和C#进行数据validation。 首先,我有一个.xlsm文件,里面有两个空的表单和macros。 在我的程序中,我打开文件,在Sheet1上创build列标题,然后在Sheet2上创buildvalidation列表。 所以,在我运行程序Sheet1后,“A1”包含文本“Color”,Sheet2“A1:A4”包含“Blue”,“Green”,“Red”,“Yellow”。 我得到这个很好。 我想这样做,所以在sheet1上的列“A”的所有单元格中都有一个下拉列表,其中包含4种颜色中的每一种,并将它们强制为唯一的input。 在Microsoft Excel中,通过转到“数据”选项卡,select“数据validation”,select“列表”并突出显示要使用的单元格。 我需要以编程方式进行这种关联。 Microsoft Excel创build的(所需的)XML如果手动执行的话是这样的: <extLst> <ext uri="{CCE6A557-97BC-4b89-ADB6-D9C93CAAB3DF}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"> <x14:dataValidations count="1" xmlns:xm="http://schemas.microsoft.com/office/excel/2006/main"> <x14:dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1"> <x14:formula1> <xm:f>'Validation Data'!$A$1:$A$4</xm:f> </x14:formula1> <xm:sqref>A1:A1048576</xm:sqref> </x14:dataValidation> </x14:dataValidations> </ext> </extLst> 下面的方法和结果是我尝试过的。 这可能会给我想要做的更好的想法。 在这里,我将“Sheet2'!$ A $ 1:$ A $ 4”作为“validationListCells”参数传入。 这表示“Sheet2”中的单元格,在这个例子中,它将包含颜色名称“Red”,“Green”等等。 我通过“A2:A1048576”作为“cellsToValidate”参数。 这表示Sheet1列“A”的所有单元格,我要在其上执行validation。 我传递“Sheet1”作为worksheetName参数。 private void InsertValidation(String worksheetName, String validationListCells, String cellsToValidate) { DataValidations […]
我有一个PHP / MySQL程序,生成一个大的Excel工作簿,使分发更容易。 我一直在一个工作簿中输出一个PHP的大型XML文件与多个工作表。 但是这个文件在超过1MB的尺寸时变得很笨重,除了在xml中出现问题时很难debugging。 我现在将每个工作表作为一个单独的文件输出,并分别使用OpenXML读取它们。 它允许我debugging每个工作表,我只需要更新改变的工作表。 我使用openxml将xml读入临时工作簿,然后将工作表复制到主工作簿。 但是,当openxml运行时,它会尝试parsing对其他工作表的所有引用。 我说'取消'并让它运行。 但引用其他工作表的单元格有#REF! 在他们中。 如果我将光标放在公式中,并返回,它将正确parsing。 但是,我不能单独对数千个参考其他工作表的公式进行分类。 有没有办法将xml文件读入现有的主工作簿? 有没有办法让Excel重新评估所有的公式,就好像我点击它并按回车? 彼得
我通过OpenXML SDK 2.5创buildexcel文件。 我有IDIsposable类,其中包括一个variables private SpreadsheetDocument ProcessDocument { get; set; } 我可以插入一个单元格的date值: var cell = GetCell(sheet, columnName, rowIndex); //method return a cell cell.DataType = new EnumValue<CellValues>(CellValues.Number); cell.CellValue = new CellValue(dateResult.ToOADate().ToString(CultureInfo.InvariantCulture)); cell.StyleIndex = 0; 在这种状态下,当我打开一个创build的单元格中的Excel文件,我看到一个数字。 这是好的,我的意思是,但现在我需要设置单元格格式…我有一个方法: public virtual UInt32 CreateCellFormat(String format) { NumberingFormat nf = new NumberingFormat(); nf.FormatCode = format; if (this.WorkbookStylesPart.Stylesheet.NumberingFormats == null) { this.WorkbookStylesPart.Stylesheet.NumberingFormats […]
我有一个现有的Excel电子表格,我需要开始填充数据。 在电子表格上是一些checkbox。 在使用OpenXML库的C#中,我可以访问文件,添加单元格数据,但不知道如何获取checkbox。 他们似乎在WorsheetPart.DrawingPart.WorksheetDrawing。 我如何获得对checkbox的引用并更改其值? 这是我的方法的开始: var spreadsheetDocument = SpreadsheetDocument.Open(filename, true); var sheet = spreadsheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>() .Elements<Sheet>() .FirstOrDefault(s => s.Name == "The Worksheet"); var relationshipId = sheet.Id.Value; var worksheetPart = (WorksheetPart) spreadsheetDocument.WorkbookPart.GetPartById(relationshipId);
我在使用OpenXML将诸如PDF等文件embedded到Excel电子表格中时遇到了困难(Excel 2010)。 我想能够模仿插入>对象>从文件创build和“显示为图标”的行为,你可以在Excel本身执行。 我创build了一个电子表格,其中包含所需结果的示例,并将其与reflection器工具一起使用,这个工具非常方便,但没有解释关系如何工作。 有没有人有一个工作的解决scheme,或者我可能能够find信息的链接? 谢谢
我正在编写一个C#控制台应用程序,它将使用OpenXML从Excel电子表格中读取值并创build一个DataTable。 该应用程序能够读取除包含下拉列表的单元格之外的所有值。 有没有办法让OpenXML读取这些单元格,并确定select哪个值? 任何build议,非常感谢。 提前致谢。 当前代码: public static string GetValue(Cell cell, SharedStringTablePart stringTablePart) { if (cell.ChildElements.Count == 0) return null; //get cell value string value = cell.ElementAt(0).InnerText;//CellValue.InnerText; //Look up real value from shared string table if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString)) value = stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText; return value; } public static void ReadData(string xlsxFilePath, string […]
我有一个使用OpenXML 2.5更新的XLSX Excel文档。 可以理解的是,有些单元格由于目前为空而更难以更新。 当单元格值为空时,下面的方法为GetCell返回null,因此我无法继续进行单元更新。 是否有更新单元格的一体化方法(或额外的库),即使它是空的? 编辑 :我一直在使用OpenXML的各种问题,所以在此期间,我开始使用ClosedXML ,而在每个场景ClosedXML完美的作品。 public static void UpdateCell(string docName, string text, uint rowIndex, string columnName) { // Open the document for editing. using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true)) { WorksheetPart worksheetPart = GetWorksheetPartByName(spreadSheet, "Sheet1"); if (worksheetPart != null) { Cell cell = GetCell(worksheetPart.Worksheet, columnName, rowIndex); cell.CellValue = new CellValue(text); cell.DataType […]
我有一个Excel文件,结构如下所示。 课程单元是无限的,可能是一个单元格,可能是十个单元格。 我怎样才能得到当前的单元格索引和行索引? A, B, C, D, E, F, G, H, …, …, ……. ID, name, age, course1, course2, course3, course4…, course……. 1, peter, 14, Yes, null, No, null….. 2, tom, 20, No, Yes, null, null… 3, john, 30, Yes, null, no, null… foreach (Cell c in cells) { //get the current cell index // […]