我正在寻找一个不错的库,用于编辑和/或在Windows Server上生成Excel文档.我觉得开放的XML SDK可能是必经之路,但是对我来说,学习曲线似乎很陡峭,开发时间也有限.我认为编辑Excel文档并不难.我准备重新发明轮子,但认为首先要问是否有一个好的项目/图书馆可以打开XML并使Excel互动更容易. . 在本官方的女士教程中,检索单元格值的代码长数十个. http://sdn.microsoft.com/en-us/library/bb739834.aspx?cs-save-lang = 1&cs-lang = mmanipulateOpenXmlexcelcelpoptionpoint 这似乎非常笨拙,我希望能与此功能有更好的接口. 注意:我很困惑如何使这个问题更加固定,但我不知道更好的方法. 解决方案 提到的包装库之一就是我一直在寻找的包装库. oflectxml.codeplex.com 其他解决方案 尝试 dreversheet
以下是关于 openxml 的编程技术问答
我们的应用程序具有分布功能.它需要几个Excel 2007电子表格,将它们复制到一个表格中,然后将其通过电子邮件发送给用户.问题是图像和图表没有复制.我已经尝试了我在这里和其他各种来源上可以找到的一切,但可悲的是,似乎没有什么可用.我们的应用程序是使用VSTO编写的,我还尝试了OpenXML,但似乎没有任何作用.实际上,试图在OpenXML中复制的文件严重破坏了这些文件,以至于Excel无法读取或恢复它们.这是我们使用的代码(注意:我们的ExcelWrapper只是在Excel应用程序上调用相同的功能,但隐藏了所有可选项目). private void CreateWorkbook(string filePath, string batchReportsPath) { //place the xlsx file into a workbook. //call getfilesnames Excel.Workbook boo
Office Automation,VSTO和Open XML SDK有什么区别?我们是否需要所有它们或其中一些都过时了? 解决方案 Office Automation是指通过com Interop进行编程的办公室程序(或更常见的是通过办公室程序通过办公室程序)的操纵. . Office的Visual Studio工具(VSTO)是一组以Visual Studio加载项(项目模板)的形式可用的开发工具,也可以使用Microsoft Office 2003和更高版本的Office应用程序的运行时间来托管. Net Framework通用语言运行时(CLR)通过.NET类型系统公开其功能.结果,它允许使用.NET语言编写Office应用程序的扩展. 打开的XML SDK是一组类型类,构建在System.io.io.packaging API之上,可用于操纵符合开放XML标准的办公室文档.与com Interop不同,它不需要Microsoft Office. 其他
我正在从openxml中检索段落的样式图,并使用paraid属性获取正确的款式. 在测试期间,我注意到根据文字文档的不同,属性可能不存在于任何段落上. 我确实知道这是Word的内部运行时段落ID. 所以问题是:是什么生成了段落属性,似乎无法弄清楚. ps.我不想使用get_style(),因为那太sloooo了... 编辑:添加了代码示例 这是在某些文档" 0"中,在某些文档中,有效的十六进制ID string sParaId = range.Paragraphs.First.ParaID.ToString("x").ToUpper(); 此打开的XML文档有时具有有效的W14:PARAID-ATRIBUTE,有时丢失了: activeDocument = Globals.ThisAddIn.Application.ActiveDocument; wordXML = XElement.Parse(activeDocument.WordO
此代码使用OpenXML软件包生成Excel电子表格.请任何人告诉如何自动安装其列宽度. OpenXmlPackage.SpreadsheetDocument spreadsheetDocument = OpenXmlPackage.SpreadsheetDocument.Create(downloadFilePath, OpenXml.SpreadsheetDocumentType.Workbook); // Add a WorkbookPart to the document. OpenXmlPackage.WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); // Add a WorksheetPart to the WorkbookPart. workbookpart.Workbook = new OpenXmlSpreadsheet.Workbook(); int numDates = dat
所以我正在编写PPTX解析器,并使用OpenXML来加载数据.一切进展顺利(这是一个谎言 - 我实际上准备好将计算机扔到整个房间并跳出窗口) ,但是我遇到了一个我根本无法弄清的视频的问题.问题是OpenXML似乎无法找到指定视频URIS的关系标签. 我所做的是书面代码,以循环浏览幻灯片中的零件并注销其ID,例如: SlidePart slidePart = ...; foreach(var curPart in slidePart.Parts) Console.WriteLine("Part ID: " + curPart.RelationshipId); 可以很好地工作 - 它可以记录幻灯片中指定的所有关系 - xml.rels文件 - 除了相关文件的视频关系外.我可以在Rels文件中看到视频关系,并且它与幻灯片中视频标签的链接ID匹配,但是我不知道如何通过代码获得它.我的图像加载正常工作(OpenXML可以找到图像关系).视频关系对待与其他关系有所不同吗?我该如何
我需要能够在PowerPoint 2003中保存演示文稿为OpenXML(" .pptx"). 我安装了Microsoft Office兼容性包.这确实使我可以从PowerPoint 2003中执行" AS PowerPoint 2007演示文稿". 我该如何编程? (例如VBA) 我尝试了Presentation.SaveAs: 虽然PowerPoint 2003中没有固有的PpSaveAsFileType枚举值,但我制作了一个打印PpSaveAsFileType值的程序,并发现在运行时,ppSaveAsOpenXMLPresentation = 24. 但是,我尝试了: SaveAs(@"c:\temp\saveas\pupik.pptx", (PpSaveAsFileType) ((int) 24), MsoTriState.msoTrue); 并获得了"无效的枚举价值"例外 有什么想法如何使这项工作? (PS-我知道这个问题已经被网络上的几个人
通过将更改为,按 ooxml黑客:锁定图形的文章,可以快速启用幻灯片中的表格分组,从而允许多种可能的不同用途,否则无法想象.实际上,还有更多的属性,通常不可用,也可以为占位符或常见形状而更改它们.是否可以在启用该简单的设置的情况下创建表?或者,就像自定义颜色在这里和在这里通过VBA手段不可用,这要容易: 将此表留在幻灯片中并复制/粘贴,在需要时用VBA代码调整/填充大小,如正常(因此避免.AddTable) 通过XSLT修改现有文件(通过将PPT>幻灯片的所有内容放入文件夹中,通过调用.XSL文件并重新添加幻灯片.xml返回文件夹等),然后打开开关在 上 将副本/粘贴抛在一边,在.xml中手动转换桌子并不复杂(现在我试图设置XSLT,但其他可用的锁)和在哪里查找:Google仅返回三个结果,即" 在这里官方文档).请参见页面中是否可以做同样的事情
如何使用Open XML 在行中获得最后一个活动列的索引 我有第1行. Dim activeCells As IEnumerable(Of DocumentFormat.OpenXml.Spreadsheet.Cell) = row.Descendants(Of DocumentFormat.OpenXml.Spreadsheet.Cell)().Where(Function(c) Not String.IsNullOrEmpty(c.InnerText)) Dim cell As DocumentFormat.OpenXml.Spreadsheet.Cell = activeCells.LastOrDefault() Dim CellRef As String = cell.CellReference 这给出了D1",但是在这种情况下,我想要的是索引" 4".我该如何处理? 解决方案 要将单元格引用转换为列索引,您可以使用以下内容(我已经从在这
我正在研究一个项目,在该项目中,我在vb.net中使用OpenXML SDK从Excel文件中读取几个单元格,并将其存储在DataTable中. 它适用于中型和小文件 但是,当我尝试打开一个大小为107MB的大文件时,阅读几张床单后,我会得到一个异常的例外.我可以通过双击打开文件(虽然需要一段时间) 以下是我使用的代码.请让我知道我是否可以通过减少记忆消耗来改善阅读过程 Dim CellRage As String() = {"AG65", "AG281", "AG335", "AG389", "AG443", "AG497", "AG551", "AG800", "AG913", "AG1081", "AG1165", "AG1305"} Dim CellValue(13) As String Using myWorkbook As SpreadsheetDocument = SpreadsheetDocument.Open(stream, False) workbo
我希望这可以帮助我,至少可以回答我问的两个问题之一在这里,但是我正在寻找如何在epplus/openxml中创建一个PivotCache,并且在网上无法在其文档中找到任何显示如何做的东西. 所以,我有一个Excel表格,wksRawData在epplus中创建,我想创建一个带有枢轴表的第二张纸,该表基于wksRawData.Cells(wksRawData.Dimension.Address)>的枢轴缓存 - 希望我可以删除wksrawdata,但是仍然保留枢轴表.我该怎么做? 到目前为止,我在第二个工作表中创建枢轴表的代码是: Dim wksRawData As ExcelWorksheet = wbk.Worksheets("Raw Data") Dim wksPvtTbl As ExcelWorksheet = wbk.Worksheets("PivotTbl") ' Insert the Pivot Table to the sheet Dim
以下创建XLSX,添加了两个具有一些数据的工作表.然后,我希望能够根据名称(或最好是ID)获取电子表格,因此我可以在以后的时间点添加/修改床单.我坚持如何再次获取代码不完整的表格. Sub Main() Using doc As SpreadsheetDocument = SpreadsheetDocument.Create(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "c:\temp\fubar.xlsx"), SpreadsheetDocumentType.Workbook) Dim currSheet As WorksheetPart ' create the workbook doc.AddWorkbookPart() doc.WorkbookPart.Workbook = New Workbook()
有人知道该怎么做吗? 我正在使用.NET中的epplus,并创建了一个带有2行字段的枢轴表和一个摘要数据字段: Dim Pivot As OfficeOpenXml.Table.PivotTable.ExcelPivotTable Pivot = wksPivot.PivotTables.Add(wksPivot.Cells("A1"), Datarange, "pName") Pivot.RowFields.Add(Pivot.Fields("Fld1")).Sort = Table.PivotTable.eSortType.Ascending Pivot.RowFields.Add(Pivot.Fields("Fld2")).Sort = Table.PivotTable.eSortType.Ascending Dim dtaFld As OfficeOpenXml.Table.PivotTable.ExcelPivotTableDataField dtaFld =
我有很多XLSX文件,在文件中的最后一个之后,我需要附加一行.我正在使用OpenXML,到目前为止,我知道如何打开/创建电子表格,但是我搜索在现有文件中添加新行的搜索均未返回.有什么想法吗? 解决方案 如果您需要做的就是在末端添加空白行,并且您不在乎一行是否已经存在于行索引上,那么以下内容应适用于您: public static void InsertRow(WorksheetPart worksheetPart) { SheetData sheetData = worksheetPart.Worksheet.GetFirstChild(); Row lastRow = sheetData.Elements().LastOrDefault(); if (lastRow != null) { sheetData.InsertAf
我正在尝试使用SharpZiplib从.xlsx文件中读取数据,以解开(内存)并读取内部XML文件.一切都很好,但是认识到日期 - 它们以朱利安格式存储,我需要以某种方式识别一个数字是日期还是数字.在另一个话题中(不幸的是它已经死了,我需要快速答案)我从马克·贝克那里了解了一些事情,但这还不够... " excel存储的日期为浮点数...整数部分是1900年1/1/1/1/1/1/1904的天数,具体取决于使用哪个日历),分数部分为比例一天(即时间部分)...因1900年被认为是leap年而变得更加尴尬. 将数据与数字区分开的唯一一件事是数字格式蒙版.如果您可以读取格式掩码,则可以使用它来将值识别为日期而不是数字...然后计算基本日期的日期值/格式." "但是,日期的属性" s"始终具有" 1"的值?我知道它定义了样式,但也许?)" s属性引用了styles.xml中的样式XF条目,并且并不总是是日期的条目1 ...这完全取决于工作簿中使用了多少种不同的样式.样式
我需要使用特定列表使用openxml的excel文件的列/列中创建下拉列表. 我将以下代码用于此目的, SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open("C:\\Users\\Harun.TV\\Desktop\\OpenXml\\1.xlsx",true); WorkbookPart workbookpart = spreadSheetDocument.WorkbookPart; Workbook workbook=workbookpart.Workbook; WorksheetPart worksheetPart=workbookpart.WorksheetParts.First(); DataValidations dataValidations1 = new DataValid
我正在尝试使用UWP应用程序(Universal Windows)编辑现有的Word文档.但是由于某种原因,我遇到"文件不存在"错误. 我尝试使用以下代码访问Word文档: using(WordprocessingDocument wordDoc = WordprocessingDocument.Open("C:\\Users\\Public\\Desktop\\Doc1.docx", true)) { } system.io.io.filenotfoundexception:'找不到文档' 解决方案 基于评论部分的进一步澄清,请参阅以下说明. 将.docx文件添加到项目中的资产文件夹中,并将构建操作设置为"内容". 为了为文件编写任何更改,我们需要将其复制到packages LocalFolder然后从那里访问. var file = await StorageFile.GetFileFromApplicationUriAsync(new U
我应该如何测试以下GetWorksheetPart方法: public class ExcelDocument : IExcelDocument { private readonly string _filePath; public ExcelDocument(string filePath) { _filePath = filePath; } public WorksheetPart GetWorksheetPart(ISpreadsheetDocument excelDoc, string sheetName) { Sheet sheet = excelDoc.GetSheet(sheetName); if (sheet == null) { throw new ArgumentException( Stri
我正在修改一个对Microsoft Word进行大量"交谈"的应用程序.目前,使用COM Interop,但我需要将其更改为打开XML.我想为此介绍单元测试,但我不确定该怎么做. 这是一个操作之一:模板Word文档包含一些书签.该应用程序用一些动态数据填充书签.我可以检查是否正确执行? 解决方案 为了单位测试这样的事情,您需要设计接缝在您的应用程序和外部代码之间的边界(在这种情况下为Word). 例如,考虑以下代码: var bookmarks = document.MainDocumentPart.Document.Body.Descendants(); DoStuffWithBookmarks(bookmarks); // Imagine we want to unit test this method 任何调用这样的外部代码的代码都不能为单位测试它与外部代码紧密结合.也就是说,您的测试将测试您的代码和外部代码,它引入了许多