Tag: openxml

使用OpenXML打开Excel工作表时,文件包含损坏的数据错误

我正在为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"; 任何帮助或见解,非常感谢。

创buildExcel表单控件 – button

我有一个项目使用以下三个库来访问XLSM文档 打开XML 封闭的XML 电子表格灯 我现在想要创build一个表单控件(一个button),将有一个macros分配给它(只是一个公共职能,我用VBA创build)。 我该怎么做呢? 一个图书馆比另一个更好吗? (或者让他们中的任何一个让我除了Open XML之外) 我正在使用C#如果任何人使用特定的语法:)

使用OpenXML,我如何关联数据validation列表

我正在处理一个.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 […]

在单个Excel工作簿中打开多个xml文件作为单独的工作表

我有一个PHP / MySQL程序,生成一个大的Excel工作簿,使分发更容易。 我一直在一个工作簿中输出一个PHP的大型XML文件与多个工作表。 但是这个文件在超过1MB的尺寸时变得很笨重,除了在xml中出现问题时很难debugging。 我现在将每个工作表作为一个单独的文件输出,并分别使用OpenXML读取它们。 它允许我debugging每个工作表,我只需要更新改变的工作表。 我使用openxml将xml读入临时工作簿,然后将工作表复制到主工作簿。 但是,当openxml运行时,它会尝试parsing对其他工作表的所有引用。 我说'取消'并让它运行。 但引用其他工作表的单元格有#REF! 在他们中。 如果我将光标放在公式中,并返回,它将正确parsing。 但是,我不能单独对数千个参考其他工作表的公式进行分类。 有没有办法将xml文件读入现有的主工作簿? 有没有办法让Excel重新评估所有的公式,就好像我点击它并按回车? 彼得

Excel中的单元格的date格式OpenXml

我通过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中,使用OpenXML,你如何改变C#中checkbox的值?

我有一个现有的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将PDFembedded到Excel中

我在使用OpenXML将诸如PDF等文件embedded到Excel电子表格中时遇到了困难(Excel 2010)。 我想能够模仿插入>对象>从文件创build和“显示为图标”的行为,你可以在Excel本身执行。 我创build了一个电子表格,其中包含所需结果的示例,并将其与reflection器工具一起使用,这个工具非常方便,但没有解释关系如何工作。 有没有人有一个工作的解决scheme,或者我可能能够find信息的链接? 谢谢

使用openXML读取C#中的excel单元格validation下拉值

我正在编写一个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更新/写入Excel单元格(即使它为空)

我有一个使用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 […]

OpenXML for excel,foreach单元格和行

我有一个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 // […]