Tag: openxml

尽pipe没有关于小数精度的worksheet.xml和styles.xml中存储的信息,Excel如何正确显示小数值?

以下是我要检查行为的步骤: 1#创build一个Excel(xlsx)文件,把1234.56789放到一个单元格中,保存。 2#提取.xlsx文件,请参阅sheet1.xml和styles.xml文件。 在xl / worksheets / Sheet1.xml中,您将看到以下内容: <sheetData><row r="1" spans="1:1" x14ac:dyDescent="0.25"><cr="A1" s="1" <v>25778.567889999998</v> </c></row></sheetData> Styles.xml中没有关于原始数字1234.56789的精度的1234.56789 。 当我们在MS Excel中打开它时,Excel如何显示原始值? 它是如何重构原始数字的,虽然在提取的文件中没有信息? 请注意,我没有更改单元格格式types或任何内容,所以单元格格式为General。 我明白,因为Excel存储的数字为浮点,它不能保存的值,以完美的准确性,我不明白的是如何保留原来的价值,当我在MS Excel中打开。 我在使用OpenXML SDK读取Excel文件时遇到了一个问题,但在询问有关这个问题之前,我正在寻找解决这个更基本问题的答案。

合并单元格上的OpenXML SDK边框仅应用于第一个单元格

使用OpenXML SDK将边框应用到合并的单元格区域时,边框仅显示合并范围中的第一个(左上angular)单元格。 我完全不知道,这让我疯狂。 使用生产力工具,我找不到任何有意义的差异,我有什么和按预期工作。 这是我为样式表生成的XML: <x:borders count="2" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <x:border> <x:left /> <x:right /> <x:top /> <x:bottom /> <x:diagonal /> </x:border> <x:border> <x:left /> <x:right /> <x:top /> <x:bottom style="thick"> <x:color auto="1" /> </x:bottom> <x:diagonal /> </x:border> </x:borders> <x:cellXfs xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <x:xf fontId="0" /> <x:xf fontId="1" fillId="2" applyFont="1" applyFill="1" /> <x:xf borderId="1" applyBorder="1" /> </x:cellXfs> 我已经尝试了一切,在边界之前,之后等应用合并。

如何将Excel工作表复制到新的工作簿中,并将所有图表,图像等?

我们的应用程序有分配function 它需要几个Excel 2007电子表格,将它们复制到一张表中,然后通过电子邮件发送给用户。 问题是图像和图表不能复制。 我尝试了一切,我可以find在这里和其他各种来源,但遗憾的是似乎没有任何工作。 我们的应用程序是使用VSTO编写的,我也尝试过OpenXML,但似乎没有任何工作。 事实上,在OpenXML中进行复制会导致文件严重损坏,导致Excel无法读取或恢复文件。 这里是我们使用的代码(注意:我们有ExcelWrapper只是调用Excel应用程序的相同function,但隐藏所有可选项目)。 private void CreateWorkbook(string filePath, string batchReportsPath) { //place the xlsx file into a workbook. //call getfilesnames Excel.Workbook bookToCopy; Excel.Workbook newWorkbook; Excel.Worksheet tempSheet = new Excel.Worksheet(); newWorkbook = ExcelWrapper.WorkbooksAdd(ExcelApp.Workbooks); if (File.Exists(filePath)) File.Delete(filePath); ExcelWrapper.WorkbookSaveAs(newWorkbook, filePath); List<string> filePaths = new List<string>(Directory.GetFiles(batchReportsPath)); filePaths.ForEach(delegate(string reportPath) { string reportPathAndName = reportPath; bookToCopy = […]

如何从一个存储过程中移动10,000行数据,以使用c#winform优秀

情况如下 – UserX需要关于PlayerY的信息。 目前我得到有关PlayerY的详细信息,并运行两个返回两个数据集的sql脚本 – 每个数据集大约有10,000条logging。 然后,我手动将这些集复制并粘贴到Excel工作簿中,并将其通过电子邮件发送给UserX 目前计划的方法: 我将为UserX创build一个简单的WinForm或WPF,它将接受PlayerY的细节input。 我将创build两个存储过程,它们将接受来自表单的input。 数据如何从数据库获取到UserX的客户端? 我问,因为数据集是相当大的,由于规模可能会有某些方法无法预料的问题。 如果存储过程首先将数据移动到实际的服务器表,然后有第二步,并将数据从服务器表中移动到Excel? 或者我应该只是让存储过程返回数据集,因为将它们直接移动到XL没有任何中间服务器表是容易的?

更新单元格并保存excel后,基于此单元格的公式不会重新计算

嗨, 我使用XML SDK来更新Excel文件中的一些单元格。 这是即时通讯使用更新给定文本的单元格(及其工作正常)的代码。 WorksheetPart worksheetPart = GetWorksheetPartByName(spreadSheet, sheetname); spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true; spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true; if (worksheetPart != null) { Cell cell = GetCell(worksheetPart.Worksheet, columnName, rowIndex); cell.CellValue = new CellValue(text); cell.DataType = new EnumValue<CellValues>(CellValues.Number); // Save the worksheet. worksheetPart.Worksheet.Save(); } 另一方面现在我想再次打开Excel文件,并从其他单元格的公式是基于前一个单元格,但即使是下面的行我无法做到更新值: spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true; spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true; 你知道为什么我没有得到更新的价值? 谢谢 问候。 何塞

如何使用C#隐藏OpenXML电子表格中的列?

我用C#使用DocumentFormat.OpenXML。 我如何隐藏特定的列? 代码的一部分: using (SpreadsheetDocument sDocument = SpreadsheetDocument.Open(resultFileName, true)) { WorkbookPart workbookPart = sDocument.WorkbookPart; WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); var relId = workbookPart.GetIdOfPart(worksheetPart); GenerateWorksheetPartContent(worksheetPart, data, templateSheet); var columns = worksheetPart.Worksheet.Descendants<Column>(); <– Empty int[] colomnsToHide = new int[] { 3, 8, 16, 17, 18 }; foreach (int i in colomnsToHide) { columns[i].Hidden = true; } } templateSheet […]

从C#导出大量数据到excel的最佳/最快捷的方式是什么?

我有使用OpenXML库导出数据的代码。 我有2万行22列,需要时间(大约10分钟)。 是否有任何解决scheme,将数据从C#导出到Excel,这将更快,因为我从一个asp.net mvc应用程序这样做,许多人的浏览器超时。

OpenXML – Cell.DateType为null

我无法确定Cell何时是一个date。 我注意到DataType是空的,所以我不能区分它是否是一个date的数字。 我正在使用下一个代码来提取单元格: WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(worksheetId); SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>(); Row[] rows = worksheetPart.Worksheet.Descendants<Row>().ToArray(); for (int i = 0; i < rows.Length; i++) { List<Cell> cells = rows[i].Elements<Cell>().ToList(); foreach (var cell in cells) { if (cell.DataType != null && cell.DataType.Value == CellValues.Date) //this line is not hit for some reason } } } 我错过了什么吗?

ClosedXML。 将DataTable添加到现有的Excel工作表

如何以最快的方式(从性能angular度)使用ClosedXML库,将DataTable值添加到已经存在的Excel工作表中? 注意:有办法创build具有DataTable参数的新工作表,但主要问题是向现有工作表添加值。

用于将100K +行快速导出到Excel的OpenXML Sax方法

我一直在努力提高写入xlsx的SAX方法的性能。 我知道在Excel中有1048576行的限制。 我只有这个限制几次。 在大多数情况下,我只写了大约125K到250K行(一个大的数据集)。 我尝试过的代码似乎没有这么快,因为它会多次写入文件。 我希望有一些caching参与,但是现在代码的工作方式似乎还有太多的磁盘访问。 下面的代码类似于在OpenXML和SAX中使用模板,因为我已经使用ClosedXML写入了一个文件,然后切换到大型内容的SAX。 尝试为这多行使用ClosedXML时,内存会从图表中消失。 所以这就是我使用SAX的原因。 int numCols = dt.Columns.Count; int rowCnt = 0; //for (curRec = 0; curRec < totalRecs; curRec++) foreach (DataRow row in dt.Rows) { Row xlr = new Row(); //starting of new row. //writer.WriteStartElement(xlr); for (int col = 0; col < numCols; ++col) { Cell cell = new […]