对不起,我的英语请。 我是新的开放式XML SDK。 我的程序能够导出一些数据和DataTable到Excel文件(模板)在模板中,我将数据插入一些占位符。 这是非常好的作品,但我也需要插入一个DataTable …我的示例代码: using (Stream OutStream = new MemoryStream()) { // read teamplate using (var fileStream = File.OpenRead(templatePath)) fileStream.CopyTo(OutStream); // exporting Exporting(OutStream); // to start OutStream.Seek(0L, SeekOrigin.Begin); // out using (var resultFile = File.Create(resultPath)) OutStream.CopyTo(resultFile); 下一个导出方法 private void Exporting(Stream template) { using (var workbook = SpreadsheetDocument.Open(template, true, new OpenSettings { AutoSave = […]
我正在使用Visual Studio 2008,我需要使用Open XML SDK 2.0从Excel工作表创build一个DataTable 。 我需要使用工作表的第一行的DataTable列创build它,并使用其余的值完成它。 有没有人有一个示例代码或链接,可以帮助我做到这一点?
我知道有不同的方法来读取Excel文件: Iterop Oledb Open Xml SDK 兼容性不是问题,因为程序将在受控环境中执行。 我的要求: 读取一个文件到一个DataTable / CUstom Entitie s(我不知道如何使一个对象的dynamic属性/字段[列名将在var文件中变化]) 使用DataTable/Custom Entities使用其数据执行一些操作。 用操作结果更新DataTable 把它写回excel file 。 这会更简单。 另外如果可能的话,build议我在自定义实体(dynamic添加属性/字段到对象)
我正在使用Office Open XML SDK读取.xlsx文件,并对读取date/时间值感到困惑。 我的一个电子表格中有这个标记(由Excel 2010生成) <x:row r="2" spans="1:22" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <x:cr="A2" t="s"> <x:v>56</x:v> </x:c> <x:cr="B2" t="s"> <x:v>64</x:v> </x:c> . . . <x:cr="J2" s="9"> <x:v>17145</x:v> </x:c> 单元格J2中有一个date序列值和一个样式属性s="9" 。 但是,Office Open XML规范说,9对应于一个跟随的超链接。 这是ECMA-376第2版第1部分 – 基础和标记语言参考 .pdf第4,999页的屏幕截图。 规范中包含的presetCellStyles.xml文件也称为builtinId 9,作为后续超链接。 <followedHyperlink builtinId="9"> 规范中的所有样式都是简单的可视化格式样式,而不是数字样式。 数字样式在哪里定义,以及如何区分样式引用s="9"来指示单元格格式(视觉)样式还是数字样式? 很明显,我正在寻找错误的地方来匹配单元格上的样式和数字格式。 哪里可以find这些信息?
我正在使用Open XML SDK来打开一个Excel xlsx文件,并尝试读取每个工作表中位置A1上的单元格值。 我使用下面的代码: using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(openFileDialog1.FileName, false)) { var sheets = spreadsheetDocument.WorkbookPart.Workbook.Descendants<Sheet>(); foreach (Sheet sheet in sheets) { WorksheetPart worksheetPart = (WorksheetPart)spreadsheetDocument.WorkbookPart.GetPartById(sheet.Id); Worksheet worksheet = worksheetPart.Worksheet; Cell cell = GetCell(worksheet, "A", 1); Console.Writeline(cell.CellValue.Text); } } private static Cell GetCell(Worksheet worksheet, string columnName, uint rowIndex) { Row row = GetRow(worksheet, rowIndex); if […]
我在这里使用公认的解决scheme将Excel表转换为数据表。 这工作正常,如果我有“完美”的数据,但如果我有一个空白单元格在我的数据中间似乎把错误的数据在每一列。 我想这是因为在下面的代码中: row.Descendants<Cell>().Count() 是填充的单元格的数量(不是所有列)AND: GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i)); 似乎find下一个填充的单元格(不一定是在那个索引中),所以如果第一列是空的,我调用ElementAt(0),它返回第二列中的值。 这是完整的parsing代码。 DataRow tempRow = dt.NewRow(); for (int i = 0; i < row.Descendants<Cell>().Count(); i++) { tempRow[i] = GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i)); if (tempRow[i].ToString().IndexOf("Latency issues in") > -1) { Console.Write(tempRow[i].ToString()); } }