Tag: openxml sdk

从Excel中删除行

以下是我尝试的方法: 答)我试图使用Microsoft.Office.Interop.Excel从Excel表中删除行。 我在SSIS包中的脚本任务中这样做。 我将库添加到GAC,因为它提出了一个错误: Could not load Library 。 现在,它引发这个错误说: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 。 谷歌search这告诉我,我需要MS Office安装它的工作,我不希望因为我部署这个解决scheme的服务器是绝对不会有MS Office安装在它上面。 我不是专家,但我想知道为什么这样的操作是不可能的,通过简单地添加引用一个DLL? 为什么必须安装MS Office。 B)我也尝试过Oledb jet jet provider,但是这个不允许删除行。 它支持的唯一操作是插入,更新和select。 我在网上遇到的事情: A) SO问题的答案build议使用Npoi ,但我不能完全依靠这个,因为今天免费的图书馆可以在未来得到支付。 B)我也遇到了EPP Plus库。 我已经使用它,并明白它是基于GNU公共许可证,但我担心使用它,因为它可能成为未来的付费工具。 C)我也遇到过使用Microsoft的Open XML SDK的人。 在我弄脏手之前,如果有人先告诉我是否应该使用这个,我会很喜欢。 不是我懒得自己尝试一下,但是我开始之前对我有什么帮助的是,这个SDK是否需要安装在机器上的任何外部程序。 因为它需要我安装一个msi才能够使用它。 有没有办法使用Microsoft COM组件来做到这一点? 我不是在这里问一个主观的问题。 […]

使用Open XML SDK 2.0检索每行和每列中的所有单元格值

我正在使用Open XML SDK来打开一个Excel文件,以检索工作表中包含数据的所有行和列中的单元格值。 这是我的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; namespace ReadingExcel { class RetrieveListOfExcelValues { static void Main(string[] args) { String fileName = @"C:\Users\Documents\TestReadingExcel.xlsx"; // Comment one of the following lines to test the method separately. ReadExcelFileDOM(fileName); // DOM } //end Main static void ReadExcelFileDOM(string fileName) […]

Excel保存文档时如何在编辑后保留OpenXml单元格属性?

我想导出一个excel文件与数据,以便我的用户可以: 下载一个Excel文件(从我的程序导出) 编辑文件中的数据 保存 上传Excel文件(将其重新导入到我的程序中) 基本上我会给他们一个离线文件的经验,如果他们没有互联网访问权限,他们可以编辑(因为我们是一个networking应用程序) 使用OpenXml SDK创buildExcel文件时,我使用OpenXmlElement.SetAttribute方法将属性添加到工作表的列,行和单元格中。 我添加的属性用于重新导入时,我可以将编辑的数据与应该存储的位置相匹配。 我输出的属性是: 数据库ID的 原始值(导出时的数据库值,以便于导入同步) 导出数据的上次修改date 导出例程如下所示: var cell = new Cell { CellReference = string.Format("{0}{1}", Column.Reference, Row.Index), DataType = this.CellDataType }; foreach (var keyValuePair in this.AttributeDictionary) { cell.SetAttribute(new OpenXmlAttribute { LocalName = keyValuePair.Key, Value = keyValuePair.Value.ToString() }); } 这个出口工作正常。 在OpenXml生产力工具中检查导出的文件时,可以看到正确添加的属性。 在Excel中编辑后保存文件时,不保留属性。 有没有办法告诉Excel保存的属性,或者是否有另一个程序,这里是最好的用来保存我需要的数据,以便轻松重新input数据? 边问题: 如果Excel不保留它们,属性是什么?

如何为Excel 2010中的所有三个date兼容性设置生成SpreasheetML示例?

根据ECMA-376第二版,第1部分 – 基础和标记语言参考 SpreadsheetML支持具有三种可能的兼容性设置和各种范围的date序列值。 http://www.documentinteropinitiative.com/implnotes/ISO-IEC29500-2008/001.018.017.004.001.000.000.aspx 在1900年的date基础系统中,下限是1999年1月1日,它的序列号是-4346018。 这个数据库系统的基准date是1899年12月30日,它的序列号为0。 在1900向后兼容date库系统中,下限是1900年1月1日,它的序列值为1.此date系统的基准date为1899年12月31日,序列值为0。 在1904年的向后兼容date库系统中,下限是1904年1月1日,它具有序列值0.该date基础系统的基准date是1904年1月1日,其序列值为0。 但是,当使用Microsoft Office Excel 2010生成date序列为1的* .xlsx文件时,* .xlsx文件没有设置任何dateCompatibility属性(表示“1900date基本系统”),而是与date序列号1是1900年1月1日(表示“1900向后兼容性”)。 workbookPr元素是这个,未经编辑的,没有dateCompatibility属性。 <x:workbookPr defaultThemeVersion="124226" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" /> 下面是一行数据,显示date序列1和格式化为date的文本结果: <x:row r="3" spans="1:2"> <x:cr="A3"> <x:v>1</x:v> </x:c> <x:cr="B3" t="str"> <x:ft="shared" si="0" /> <x:v>1900-01-01 00:00:00.0</x:v> </x:c> </x:row> 该公式只是date格式,在工作表中前面引用: <x:ft="shared" ref="B1:B42" si="0">TEXT(A1, "yyyy-mm-dd HH:mm:ss.0")</x:f> 此公式给出与将date格式图案应用于date序列号相同的结果,在下面的屏幕截图中显示。 同样格式化否定date会导致错误,另一个指标是Excel实际上使用向后兼容的date系统,尽pipedateCompatibility上没有dateCompatibility属性。 工作簿的选项仅显示1904年date系统的未选中checkbox。 我没有看到1900年的date为1900年向后兼容的选项。 我读的规格错了吗? 还是SpreadsheetML? 或者是其他东西?

打开XML:使用列索引删除整个Excel列

我在电子表格中获得了excel列的列索引,并且需要使用此列索引删除整个列。 我只能使用Open XML SDK 2.0。 using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; namespace openXMLDemo { public class Program { public static void Main(string[] args) { string fileFullPath = @"path to the excel file here"; string sheetName = "excelsheet name here"; using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileFullPath, true)) { Sheet sheet = document.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>().Where(s => s.Name == sheetName).FirstOrDefault(); if (sheet != […]

通过OpenXML SDK获取一张excel的表(工作部分)

我在一张excel文件中有3个表格,我使用OpenXML SDK读取Excel文件,如下所示: SpreadSheetDocument document = SpreadSheetDDocument.open(/*read it*/); foreach(Sheet sheet in document.WorkbookPart.Workbook.Sheets) { //I need each table or work part of sheet here } 所以,如你所见,我可以得到每一张Excel,但是我怎样才能得到每张工作表中的工作部分,就像我的3张表一样,我可以在这些表上迭代,是否有人知道这一点? 有什么build议?

使用SSIS来填充使用OOXML生成的Excel工作簿

我们正在尝试使用OOXML生成MS Excel工作簿,并使用SSIS填充数据。 我们能够生成工作簿和工作表,也能够在标题单元格中创build列和插入数据。 我们也可以使用SSIS来填充数据。 但Sheet( DocumentFormat.OpenXml.Spreadsheet.Sheet )和所有的单元格( DocumentFormat.OpenXml.Spreadsheet.Cell )都变成了OpenXmlUnknownElement 。 所以我们不能使用下面的代码来读取表格/单元格: Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet1").SingleOrDefault<Sheet>(); 如果我们先用MS Excel打开并保存,我们可以读取同一个文件。 有谁知道如何解决这个问题?

如何从工作表到SpreadsheetDocument?

我的基于OpenXML SDK的应用程序遍历工作簿,并在其中通过工作表进行迭代。 我想分解工作表的检索。 给定一个Spreadsheet.Worksheet ,我如何find它的父Packaging.SpreadsheetDocument ? 通过祖先,也许? TIA 更新: Jesper提出了以下代码: WorksheetPart worksheetPart = worksheet.WorksheetPart; OpenXmlPackage openXmlPackage = worksheetPart.OpenXmlPackage; SpreadsheetDocument document = (SpreadsheetDocument) openXmlPackage; 这似乎是正确的答案。

使用C#和Open XML SDK 2.5,你如何将单元格的值设置为单个字符的颜色

我想自动从我们的氨基酸1号字母代码从他们目前输出的C#。 电子表格输出正确,我有这样一个列: AB 1 KJAGLKJGKASLJG 2 FLFSFHDSHDSHHF 3 KJSDALKDJKLFJK 4 KLFDJSHASDFFSD 每个不同的angular色将被分配自己的颜色。 例如,K是红色,L是黄色,D是橙色。 这必须通过Open XML SDK完成,而不是Excel COM编程或VBA脚本。 目前,这是如何输出单元格,但他们使用默认的样式表。 string columnName = AlphabetLetterRollOver((int) columnIndex); string cellRef = columnName + (rowIndex + 1); Cell cell1 = new Cell {CellReference = cellRef, StyleIndex = 1U}; cell1.DataType = CellValues.String; CellValue cellValue1 = new CellValue(); cellValue1.Text = columnValue; cell1.Append(cellValue1); row1.Append(cell1); […]

C#TimeSpan到Open XML的Excel

我正在创build一个项目,在MS Word 2010文档中创build一个显示时间的条形图。 主程序将这些时间存储在List<TimeSpan> 我使用Word中的“插入图表”function创build了一个示例Word文档,并用不同的时间(每个小时约1小时)制作了一个条形图,例如,格式为01:04:04(使用此代码作为模板)。 我查看了Open XML SDK 2.0生产力工具,注意到它是在reflection代码中生成的(对于上面的示例): numericValue9.Text = "4.449074074074074E-2"; //01:04:04 如果我想用我的List<TimeSpan>自动生成这个,我该如何将我的TimeSpans转换为这个小的数值? 那是TimeSpan.TotalDays吗? 另外,看Word文档(右键单击图表并select编辑数据),我注意到“AM”被追加到我的TimeSpan的末尾。 Excel是否将我的时间跨度转换为date时间?