Tag: openxml sdk

openxml sdk excel文件打开closures公式单元格在Windows Azure网站上重新计算

我的asp.net mvc运行在Windows云端的windows azure网站上。 我有基于input的计算公式,基于input的单元格和基于另一个单元格的Excel单元格。 我能够使用开放的XML SDK SDK C#代码来成功地在我的本地开发机器上执行以下操作。 将input值传递给input单元格并保存工作表。 使用Microsoft.Office.Interop.Excel.Application对象打开和closuresexcel文件 var excelApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook workbook = excelApp.Workbooks.OpenXML(Path.GetFullPath(filename)); workbook.Close(true); excelApp.Quit(); 阅读公式单元格和计算的值。 现在的问题 我需要在Windows Azure网站上部署,我不想部署Microsoft Excel应用程序。 如何使用Microsoft.Office.Interop.Excel.Application对象执行步骤2 ,以便我不必在Windows Azure网站云上安装Excel 。 我必须做第二步为了Excel公式单元格重新计算基于公式。 我已经尝试删除单元格,并且不能以编程方式阅读公式单元格。

OpenXML从Excel创buildDataTable – 资金单元格值不正确

我正在尝试使用OpenXML从Excel电子表格创build一个数据表。 当使用Cell.CellValue.innerXml获取一行的单元格值时,用户input的并在电子表格上可见的货币值的返回值与解释的值不同。 电子表格单元格格式为文本,单元格值为570.81。 在OpenXML中获取数据时,该值被解释为570.80999999999995。 此方法用于许多不同的excel导入,其中按表头或列索引的单元格数据types在构build表时不知道。 我见过一些关于Ecma Office Open XML文件格式标准的文章,并提到了numFmtId。 这可能是有价值的吗? 我假设由于数据types是文本,并且数字有两位小数,所以必须假定单元格已经被四舍五入(即使没有公式存在)。 我希望有人可以提供一个解决scheme来正确解释数据。 下面是GetCellValue方法: private static string GetCellValue(SharedStringTablePart stringTablePart, DocumentFormat.OpenXml.Spreadsheet.Cell cell,DocumentFormat.OpenXml.Spreadsheet.Stylesheet styleSheet) { string value = cell.CellValue.InnerXml; if (cell.DataType != null && cell.DataType.Value == DocumentFormat.OpenXml.Spreadsheet.CellValues.SharedString) { return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText; } else { if (cell.StyleIndex != null) { DocumentFormat.OpenXml.Spreadsheet.CellFormat cellFormat = (DocumentFormat.OpenXml.Spreadsheet.CellFormat)styleSheet.CellFormats.ChildElements[(int)cell.StyleIndex.Value]; int formatId = (int)cellFormat.NumberFormatId.Value; if (formatId […]

OpenXMLdynamic创build“表/数据透视表”

我正在创build一个生成内存excel的示例程序。 该程序已经生成的Excel,但是我不能把表工作… 程序: public class Program { static void Main(string[] args) { CreateCurrentAccount(); } static void CreateCurrentAccount() { byte[] _buffer = ExcelGenerator.CurrentAccount.GetExcel(); File.WriteAllBytes("CurrentAccount.xlsx", _buffer); } } ExcelGenerator类: public class ExcelGenerator { static uint? _generalStyle = 0; static uint? _dateStyle = 1; static uint? _currencyStyle = 2; static uint? _percentageStyle = 3; static int maxStyleSheetName = […]

是否有SAX的方式来循环OpenXML行?

我使用SAX方法parsing大文件:使用Open XML SDKparsing和读取大型Excel文件 这是我的修改版本(为简单起见,只获取行号) using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open("BigFile.xlsx", true)) { WorkbookPart workbookPart = myDoc.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); OpenXmlReader reader = OpenXmlReader.Create(worksheetPart); String rowNum; while (reader.Read()) { if (reader.ElementType == typeof(Row)) { if (reader.HasAttributes) rowNum = reader.Attributes.First(a => a.LocalName == "r").Value } } } 问题是这遍历每个项目/单元格/列/什么,只有当元素types是行。 是否有一个SAX的方式来循环只通过行,而不是工作表中的每个项目? 谢谢,

我如何从Excel工作簿中去除macros?

我目前被迫使用Office Live / Skydrive(不pipe名字是什么)编辑Excel工作簿。 Skydrive不会让我上传一个包含macros的工作簿,而且我不需要这些macros,所以我想在C#中编写一个简单的清理应用程序,简单地删除所有的macros。 如何使用Excel 2007及更高版本(.xlsm)文件来解决这个问题? 编辑:基本上,我想打开一个xlsm文件,并将其保存为一个xlsx文件,而不需要安装Excel,即通过OpenXML SDK什么的。

使用OpenXML从MVC控制器读取工作簿

我使用Open XML从MVC生成Excel文档。 代码如下: public ActionResult ExcelReport() { var custId = 1234; //ToDo get from session when it is set using (MemoryStream mem = new MemoryStream()) { ExcelReportGenerator excel = new ExcelReportGenerator(); excel.CreateExcelDoc(mem); var reportName = string.Format("MyReport_{0}.xlsx", custId); return File(mem.ToArray(), System.Net.Mime.MediaTypeNames.Application.Octet, reportName); } } 我的CreateExcelDoc方法如下所示: public void CreateExcelDoc(MemoryStream mem) { SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(mem, SpreadsheetDocumentType.Workbook); //SpreadsheetDocument […]

使用OpenXML SDK以stringforms获取所有单元格值

我想用类似于SAX的方式使用OpenXML SDK v2.0读取Excel 2007+文档。 我正在使用这个博客作为一个粗略的指导: http : //blogs.msdn.com/b/brian_jones/archive/2010/05/27/parsing-and-reading-large-excel-files-with-the-open -xml-sdk.aspx 但是,在我的文档中,我有一个string和数字值的混合。 因此,string值被存储为SharedString,所以当为这样的单元格读取CellValue时,我得到一个数字,我已经读取的是索引(因此需要获取InnerText)。 这似乎增加了太多的复杂性。 对于我来说,有没有简单地把工作表中的所有单元格当作文本/string,并通过所有的单元格来获取值,类似于博客文章的例子? 谢谢

只读或locking特定的单元格或行使用打开XML XML SDK

我正在使用打开xml sdk导出excel。 我得到的Excel文件,并将该文件复制到另一个地方,然后我插入数据的新行。 我应该使该行为只读(或我必须locking)使用打开XML XML SDK .. 怎么做 ?

使用OpenXML读取列中的Excel表格数据

有没有一种方法可以读取Excel表格列而不是使用OpenXML-SDK和C#的行。 我已经尝试使用EPPlus软件包,但面临一些问题,因为我的应用程序也使用EPPlus不支持的“.xslm”文件。 所以,我需要一个OpenXML解决scheme来读取列中的数据。 如果有人有一个例子,这将有所帮助。 感谢斯里兰卡

使用打开的xml sdk 2.5将数据添加到现有的Excel中

我试图读取现有的Excel文件,并复制到另一个path,然后我试图插入数据到我克隆的文件。 但是我可以'插入数据。 我不知道我犯了什么错误。 但在这里,我已经给了我的代码。 错误发生在行sheetData.InsertAt<Row>(row,++rowIndex); 。 请帮我一下 Package spreadsheetPackage = Package.Open(destinationFile, FileMode.Open, FileAccess.ReadWrite); using (var document = SpreadsheetDocument.Open(spreadsheetPackage)) { foreach (System.Data.DataTable table in ds.Tables) { var workbookPart = document.WorkbookPart; var workbook = workbookPart.Workbook; var sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault(); Worksheet ws = ((WorksheetPart)(workbookPart.GetPartById(sheet.Id))).Worksheet; SheetData sheetData = ws.GetFirstChild<SheetData>(); //Sheet sheet = sheets.FirstOrDefault(); if(sheet==null) throw new Exception("No sheed found […]