Tag: openxml sdk

使用OpenXML sdk读取excel文件时遇到困难

我有一个从Excel文件中读取并将结果存储在DataSet中的函数。 我有另一个function写入Excel文件。 当我尝试从常规的人类生成的Excel文件读取时,Excel读取函数返回一个空白的DataSet,但是当我从由写入函数生成的Excel文件读取时,它工作得很好。 该函数然后将无法正常生成的Excel文件,即使我只是复制和粘贴函数生成的Excel文件的内容。 我终于追查到这一点,但我不知道该从哪里出发。 我的代码有什么问题吗? 任何帮助是极大的赞赏。 提前致谢! 这是excel生成函数。 public static Boolean writeToExcel(string fileName, DataSet data) { Boolean answer = false; using (SpreadsheetDocument excelDoc = SpreadsheetDocument.Create(tempPath + fileName, SpreadsheetDocumentType.Workbook)) { WorkbookPart workbookPart = excelDoc.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); Sheets sheets = excelDoc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets()); Sheet sheet = new Sheet() { Id = […]

如何使用OpenXML更新Excel中的外部链接

我有一个工作簿与几个外部链接。 经常我们需要更新链接指向一个新的Excel数据库,所以我正在做一个小型的Windows应用程序自动执行。 我正在尝试使用OpenXML来完成这个任务。 我不想使用Interop,因为打开文件需要很长时间,请更改链接,然后再次closures工作簿。 任何想法,请让我知道。 我也打开使用ClosedXML。

为什么使用OpenXml SDKparsingexcel单元格时,单元格样式索引返回错误的CellFormat值?

考虑一个值为39.95的通用格式单元格。 当我获取CellFormat的单元格时,它返回错误的单元格格式 – CellFormat thisCellFormat = ((CellFormat)cellFmts.ChildElements[(int)thisCell.StyleIndex.Value]); int fmtId = Convert.ToInt32(thisCellFormat.FormatId.Value); 返回的fmtId的值是1,在某些情况下是38,应该是2或39。 此问题仅适用于常规格式单元格,我正在为数字格式单元格获取正确的ID。 下面是标准的ECMA-376办公室开放XML文件格式指定隐含的单元格格式的参考 – ID格式代码 0一般 1 0 2 0.00 3#,## 0 4#,## 0.00 9 0% 10 0.00% 11 0.00E + 00 12#?/? 13#?? / ?? 14毫米 – 月 – 年 15 d-mmm-yy 16 d-mmm 17毫米 – 年 18小时:毫米上午/下午 19 h:mm:ss AM / PM […]

在OpenXML中设置DefinedNames,为Excel中的所有工作表设置打印标题

我的最终目标是以编程方式为我的文档中的所有工作表设置Excel的“打印标题”值。 最初我尝试着使用SpreadsheetPrintingParts对象( 基于这个问题 ) – 但是,这需要生成一个基本的64string,它看起来必须来自一个现有的文件。 (我从头开始生成电子表格。) 这篇文章然后告诉我,我可以将“Print_Titles”设置为我需要的行上定义的名称。 我一直试图以编程方式做,但这似乎破坏了我的所有文件。 我的代码: var definedNamesCol = new DefinedNames(); //Create the collection var definedName = new DefinedName() { Name = "_xlnm.Print_Titles", Text = "\'SheetName\'!$2:$2", LocalSheetId = (UInt32) (_nextSheetId – 1) }; // Create a new range definedNamesCol.Append(definedName); // Add it to the collection _workbookPart.Workbook.Append(definedNamesCol); 我也看过OpenXML的生产力工具,它表明:(基本上相同) DefinedNames definedNames1 = new […]

读取非常大的ex​​cel文件

我正在使用这篇文章来读取一个非常大的Excel文件,使用SAX方法。 https://msdn.microsoft.com/en-us/library/office/gg575571.aspx 由于客户端计算机内存不足,无法将值存储在DataTable或内存中。 尝试阅读并立即将商店价值读取到数据库中: // The SAX approach. static void ReadExcelFileSAX(string fileName) { using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) { WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); OpenXmlReader reader = OpenXmlReader.Create(worksheetPart); string text; while (reader.Read()) { if (reader.ElementType == typeof(CellValue)) { text = reader.GetText(); Console.Write(text + " "); } } Console.WriteLine(); Console.ReadKey(); } } […]

如何插入Excel单元格而不创build损坏的文件?

我正在使用OpenXML SDK来更新Excel电子表格的内容。 将单元格插入Excel行时,必须按照正确的顺序插入,否则文件将无法在Excel中正确打开。 我正在使用下面的代码来find将插入单元格后的第一个单元格。 这段代码几乎直接来自OpenXML SDK文档 public static Cell GetFirstFollowingCell(Row row, string newCellReference) { Cell refCell = null; foreach (Cell cell in row.Elements<Cell>()) { if (string.Compare(cell.CellReference.Value, newCellReference, true) > 0) { refCell = cell; break; } } return refCell; } 当我用此代码编辑文件,然后在Excel中打开它们时,Excel报告文件已损坏。 Excel能够修复该文件,但大部分数据已从工作簿中删除。 为什么这会导致文件损坏? 注意:在转向痛苦的底层OpenXML SDK之前,我尝试了两个不同的.NET Excel库。 NPOI创build了包含损坏的电子表格,并且每当我尝试保存时,EPPlus都会抛出exception。 我正在使用每个版本的最新版本。

使用OpenXML写入现有的Excel文件

任何人都可以告诉我我的代码中缺less什么? 它运行没有任何错误,但它不会写入我的Excel文件。 我只是试图把它写到我的电子表格的商业选项卡上的单元格A1。 我的代码如下: using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.IO; using System.Reflection; using System.Data.OleDb; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; using System.Xml; using System.Diagnostics; namespace Application.Model { [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] public class TempCode : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { string FilePath; string FileName; string FileExceptionsPath; string FileExceptionsName; string […]

我怎样才能得到一个Excel工作表的使用范围与OpenXML?

我需要在新的工作表中获取使用的单元格范围。 例如: A1:AY55 在Excel VBA中,可以通过恰当命名的UsedRange属性来获取。 OpenXML中是否有相同的内容?

openxml如何用OpenXmlReader读取inlineStr

我有以下代码: public static void ReadExcelFileSAX(string filename) { using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(filename, true)) { WorkbookPart workbookPart = myDoc.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); OpenXmlReader reader = OpenXmlReader.Create(worksheetPart); string text; while (reader.Read()) { if (reader.ElementType == typeof(CellValue)) { text = reader.GetText(); } } } } 此代码可以读取数据types为数字的任何单元格,但无法读取inlineStr 用生产力工具查看XML,我认为代码可以阅读下面的XML <x:cr="D2" t="n"> <x:v>328</x:v> </x:c> 但它不能阅读这个(或者我不知道该怎么做) <x:cr="F1" s="6" t="inlineStr"> <x:is> <x:t>T1</x:t> […]

使用Open XML Format SDK 2.0 CTP创build时不保存文档

我想使用Open XML Format SDK 2.0创build基于模板的Excel文档。 我遵循本教程使用Open XML Format SDK 2.0 CT创build文档 。 我的问题是,我放入文档的行和单元格不会被保存。 当我打开文档时,它看起来就像模板一样。 我运行我的代码时不会引发exception。 我想我必须强制更改保存在文档中,但我不知道如何。 这是我的一些代码: public static void GenerateExcelReportToDisk() { var factory = new Factory(); var generated = "result.xlsx"; var newFile = Util.GetReportTargetPath() + generated; var templateFile = Util.GetReportTemplatePath() + @"template.xlsx"; File.Copy(templateFile, newFile, true); using (var myWorkbook = SpreadsheetDocument.Open(newFile, true)) { var workbookPart […]