Tag: openxml sdk

使用openxml删除x名称空间

我发现这个问题,我有一些相同的问题。 XLSX-如何摆脱默认命名空间前缀x:? 在生成OpenXML Excel工作表时,我遇到了一个问题。 特别是样式表部分。 当样式表以某种方式获得时间轴的样式(仅适用于Excel 2013)时,它可以生成一个Excel文件。 样式表然后包含正确的命名空间(xmlns:x =“…”)。 这样可以在Excel 2010中打开它。但是,当使用Excel 2010保存生成的Excel文件时,x命名空间将成为默认命名空间,除了时间轴扩展元素之外,它将从所有的ellement中删除。 当在Excel中重新打开文件时,这将导致错误。 在OpenXml生产力工具中打开相同的文件时,会出现x是未知名称空间的错误。 所以这里有一些xml结果代码。 生成excel文件(stylesheet.xml)后的Fisrt: <?xml version="1.0" encoding="utf-8" standalone="yes"?> <x:styleSheet xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" mc:Ignorable="x14ac"> <x:fonts count="3" x14ac:knownFonts="1"> <x:font> <x:sz val="11"/> <x:color theme="1"/> <x:name val="Calibri"/> <x:family val="2"/> <x:scheme val="minor"/> </x:font> <!– more fonts –> </x:fonts> <x:fills count="7"> <x:fill> <x:patternFill patternType="none"/> </x:fill> <!– more […]

如何使用OpenXML SDK将Excel转换为CSV?

我有要求将Excel(2010)文件转换为csv。 目前我使用Excel Interop来打开和SaveAs csv,效果很好。 但是,Interop在我们使用它的环境中存在一些问题,所以我正在寻找另一个解决scheme。 我发现在不使用interop的情况下使用Excel文件的方式是使用OpenXML SDK。 我得到了一些代码,以通过每张表中的所有单元格,并简单地将它们写入另一个CSV文件。 我有一个问题是处理空白行和单元格。 看来,用这个代码,空行和单元格是完全不存在的,所以我没有办法知道它们。 是否有通过所有行和单元格,包括空白? string filename = @"D:\test.xlsx"; string outputDir = Path.GetDirectoryName(filename); //——————————————————– using (SpreadsheetDocument document = SpreadsheetDocument.Open(filename, false)) { foreach (Sheet sheet in document.WorkbookPart.Workbook.Descendants<Sheet>()) { WorksheetPart worksheetPart = (WorksheetPart) document.WorkbookPart.GetPartById(sheet.Id); Worksheet worksheet = worksheetPart.Worksheet; SharedStringTablePart shareStringPart = document.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First(); SharedStringItem[] items = shareStringPart.SharedStringTable.Elements<SharedStringItem>().ToArray(); // Create a new filename […]

为什么在这个例子中追加AutoFilter会破坏我的excel文件?

您好我使用下面的方法来应用自动filter: public static void ApplyAutofilter(string fileName, string sheetName, string reference) { using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, true)) { IEnumerable<Sheet> sheets = document.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>().Where(s => s.Name == sheetName); var arrSheets = sheets as Sheet[] ?? sheets.ToArray(); string relationshipId = arrSheets.First().Id.Value; var worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(relationshipId); var autoFilter = new AutoFilter() { Reference = reference }; worksheetPart.Worksheet.Append(autoFilter); worksheetPart.Worksheet.Save(); } […]

用Open XML插入WorkSheet – “…不可读的内容…”

当我按照这个教程: http://msdn.microsoft.com/en-us/library/cc881781.aspx 打开一个Excel文档并插入一个空的工作表,最后的结果是一条消息,告诉“Excel中发现不可读的内容…是否要恢复此工作簿的内容…”。 如果我恢复所有插入的工作表是空白的(即使我编程添加内容) 将xlsx重命名为.zip并检查后,显示工作表已创build,并添加了内容。 任何有类似问题的人? 这可能是不创build新创build的部分之间的关​​系的东西…

在OpenXML和SAX中使用模板

我从数据表创build一个大型的XLSX文件,使用parsing和读取大型Excel文件和Open XML SDK中提出的SAX方法。 我正在使用XLSX文件作为模板。 在这篇文章中描述的方法工作正常,用一个新的工作表replace为一个现有的工作表,但我想复制模板(string值,格式等),工作表中的标题行,而不是使用标题行从数据表作为原始代码。 我已经尝试了下面的代码,但是XLSX文件最终在标题行中没有文本 – 格式被复制,而不是文本。 我查看了表单的XML文件,对我来说看起来还行(引用sharedStrings.xml文件,它仍然有string的定义)。 来自Open XML SDK 2.0生产力工具的reflection代码显示了一个稍微奇怪的结果:单元格似乎没有设置文本值: cellValue1.Text = ""; 即使XML说: <x:cr="A1" s="4" t="s"> 下面是OpenXmlReader使用的主要代码: while (reader.Read()) { if (reader.ElementType == typeof(SheetData)) { if (reader.IsEndElement) continue; // Write sheet element writer.WriteStartElement(new SheetData()); // copy header row from template reader.Read(); do { if (reader.IsStartElement) { writer.WriteStartElement(reader); } else if (reader.IsEndElement) […]

在OpenXML中创build自定义列宽(excel)

我是OpenXML(第2.5版)的新手,我可以创build行和单元格,但是我需要能够设置列宽,并且出于某种原因我无法正确执行此操作。 没有这个代码: Columns cols = new Columns(); Column c1 = new Column() { CustomWidth = true, Width = 20 }; cols.Append(c1); wspart.Worksheet.Append(cols); 该程序运行并生成一个excel文件罚款。 下面的代码遵循运行,但是把一个腐败的excel文件留给我。 当我尝试添加列时,我做错了什么? public static void createExcel() //TODO change to private { //create the spreadsheet document with openxml See https://msdn.microsoft.com/en-us/library/office/ff478153.aspx SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Create(@"C:\Users\Reid\Documents\BLA\test.xlsx", SpreadsheetDocumentType.Workbook); //TODO change path //add a workbook part WorkbookPart […]

如何在电子表格中打开XML电子表格“uncollapse”单元格?

我在C#中使用服务器端的xslx Excel文件。 在电子表格中,总共有15列(单元格)。 在单元格行中,有些值缺失。 所以第一行是我的头将正确的有15个单元格。 但是我的数据行,有些单元格可能有空的值,所以Open XML有一组“锯齿”的单元格值。 第1行将具有完整的15个单元格,第2行可能有13个单元格,因为其中的两个值为空。 什么! 如何正确映射这些数据? 它基本上将所有东西都转移到左边,我的单元格值是错误的。 我错过了什么? 看起来他们正在使用Open XML术语“折叠”。 WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart; IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>(); string relationshipId = sheets.First().Id.Value; WorksheetPart worksheetPart = (WorksheetPart)spreadSheetDocument.WorkbookPart.GetPartById(relationshipId); Worksheet workSheet = worksheetPart.Worksheet; SheetData sheetData = workSheet.GetFirstChild<SheetData>(); IEnumerable<Row> rows = sheetData.Descendants<Row>(); 澄清:这是另一种方法来问这个问题。 如果我想将Excel文件中的内容放入DataTable中,该怎么办? 我想要所有的数据列正确排列。 我怎么能做到这一点? 这个问题比我这里问得好: 阅读Excel Open XML忽略空白单元格

Excel在* .xslx中发现不可读的内容

我正在从代码生成一个Excel模板。 当我运行该部分来创build我的工作簿时,在代码中没有出现错误,但是当我打开Excel文档时,出现错误,指示文件不可读。 我可以点击打开它,我收到以下消息 删除logging:从/xl/workbook.xml部分(工作簿)的工作表属性 有什么想法可能是我的代码错了吗? public void CreatePackage() { using (SpreadsheetDocument package = SpreadsheetDocument.Create(FilePath, SpreadsheetDocumentType.Workbook)) { CreateParts(package); } } private void CreateParts(SpreadsheetDocument document) { ExcelWorkBook excelworkbook = new ExcelWorkBook(); ExcelSheetHelper excelworksheet = new ExcelSheetHelper(); ExcelSharedStringsTable excelsharedtable = new ExcelSharedStringsTable(); ExcelWorkSheetPartBuilder excelworksheetbuilder = new ExcelWorkSheetPartBuilder(); ExtendedFilePropertiesPart extendedFilePropertiesPart1 = document.AddNewPart<ExtendedFilePropertiesPart>("rId3"); ExcelWorkSheetPartBuilder.GenerateExtendedFilePropertiesPart1Content(extendedFilePropertiesPart1); WorkbookPart workbookPart1 = document.AddWorkbookPart(); excelworkbook.GenerateWorkbookPartContent(workbookPart1); WorkbookStylesPart […]

有没有一种工具可以在使用OpenXML SDK创build的Excel文档中查找错误?

有没有一种工具能够识别使用OpenXML SDK创build的Excel文档中错误的确切位置? 我已经使用Microsoft OpenXML SDK 2.5创build了一个Excel文件(也尝试了2.0版,结果相同),并且必须在代码中的某处出错。 我想知道的是在哪里。 SDKvalidationfunction都说文档是有效的。 使用OpenXML SDK生产力工具validation生成的Excel文件时,响应是“在程序包中未findvalidation错误”。 但是使用MS Excel打开Excel文件时,出现错误提示用户该文件需要修复,修复文件正确显示后。 Excel修复日志说,table.xml文件有一个错误,但不是文件上的错误的位置。 Excel修复日志如下: 修复logging:从/xl/tables/table.xml中的表(列表) 是否有OpenXML SDK生产力工具以外的工具可用于validationExcel电子表格并识别文档中的错误?

使用Open XML如何将公式插入到Excel 2010工作表中?

我正在使用Visual Studio 2010(VB.Net)和Open XML SDK 2.0。 如何将公式插入到Excel 2010工作表中? 当我这样做时,我也希望将单元格的CellValue属性设置为DBNull或EmptyString强制Excel重新计算单元格,当用户打开工作簿。