- 浏览: 978790 次
- 性别:
- 来自: 山西
文章分类
最新评论
-
白小默:
你好 可以提供下源码DEMO吗,不知为何,我导出来的excel ...
jxls 使用模板文件导出生成excel -
zkzqzzz:
博主威武!
让微信二维码扫描您的APK -
zkzqzzz:
感谢博主 原来那些类都不是必须的 或者自己写!!博主真棒 ...
抢红包插件实现原理浅析 -
zkzqzzz:
博主 请问你的其他类在哪里呢?
抢红包插件实现原理浅析 -
zkzqzzz:
其他类在哪呢?
抢红包插件实现原理浅析
这些代码是建立在Open XML SDK CTP 2基础上的,使用前请先下载Open XML Format SDK 2.0。点击这里下载。SDK默认会安装在C:\Program Files (x86)\Open XML Format SDK\V2.0 (64bit)目录下,lib子目录下的DocumentFormat.OpenXml.dll必须被引用到项目中。
Excel也罢,word也罢,他们都是通过Open XML的标准来组织特定标记的。其实,你只要理解这些标记的含义,你可以不用任何工具自己来解析XML得到你想要的内容和格式。而Open XML SDK提供给我们的是更统一的解析方式。通过下边传统的DOM解析,你可以得到一个Excel的worksheet集合。
public static List<String> GetSheets(String strFileName) { // Fill this collection with a list of all the sheets. List<String> sheets = new List<String>();
using (SpreadsheetDocument xlPackage = SpreadsheetDocument.Open(strFileName, false)) { WorkbookPart workbook = xlPackage.WorkbookPart; Stream workbookstr = workbook.GetStream(); XmlDocument doc = new XmlDocument(); doc.Load(workbookstr);
XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable); nsManager.AddNamespace("default", doc.DocumentElement.NamespaceURI); XmlNodeList nodelist = doc.SelectNodes("//default:sheets/default:sheet", nsManager);
foreach (XmlNode node in nodelist) { String sheetName = String.Empty; sheetName = node.Attributes["name"].Value; sheets.Add(sheetName); } }
return sheets; } |
而我们可能更关心的是如何来得到行、列单元格内的值。当然,worksheet除了这些对象(关系)集合外,它也通过直观的行(Row)、列(Cell)来组织内容区域。通过LINQ to XML我们可以很容易的通过Descendents来得到。
IEnumerable<Sheet> sheets = document.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == strSheet); if (sheets.Count() == 0) { // The specified worksheet does not exist. return null; }
WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheets.First().Id); Worksheet worksheet = worksheetPart.Worksheet;
//Ignore row header IEnumerable<Row> rows = worksheet.Descendants<Row>(); foreach (Row row in rows) { foreach (Cell cell in row) { …… } } |
public static String GetValue(Cell cell, SharedStringTablePart stringTablePart) { if (cell.ChildElements.Count == 0) return null; //get cell value String value = cell.CellValue.InnerText; //Look up real value from shared string table if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString)) value = stringTablePart.SharedStringTable .ChildElements[Int32.Parse(value)] .InnerText; return value; } |
再扩展一下如果你想将一个Excel的工作簿以强类型展示,那该如何做呢?列明,每一个行代表一个对象元素,通过反射来来对对象赋值。请注意在工作簿中并不是每个列都能和你的类属性对应的,所以必须判断。当然,你也可以通过中间元素来产生映射扩展。
//get SharedStringTablePart to get the cell value. SharedStringTablePart tablePart = document.WorkbookPart.SharedStringTablePart;
//Column headers String[] cellHeaders = null; String[] cellValues = null;
//Ignore row header IEnumerable<Row> rows = worksheet.Descendants<Row>(); foreach (Row row in rows) { if (row.RowIndex == 1) { cellHeaders = new String[row.Count()]; } cellValues = new String[row.Count()]; int i = 0;
foreach (Cell cell in row) { String columnValue = GetValue(cell, tablePart);
//The first row is header if (row.RowIndex == 1) { cellHeaders[i] = columnValue; } else { cellValues[i] = columnValue; } i++; } if (row.RowIndex > 1) { products.Add(ProductConverter.Convert(cellValues, cellHeaders)); } } |
对最终的单元格值集合到Product对象的转换,我们通过ProductConverter类来完成。在这里,你可以通过反射来完成,但枚举出所有你可能用到的类型是你不得不面对的问题。
foreach (PropertyInfo pi in product.GetType().GetProperties()) { for (int i = 0; i < cellHeader.Length; i++) { if (pi.Name.Equals(cellHeader[i], StringComparison.OrdinalIgnoreCase)) { //get property type String propertyType = pi.PropertyType.Name; switch (propertyType) { case "Int32": pi.SetValue(product, int.Parse(cellValues[i]), null); break; case "DateTime": pi.SetValue(product, System.DateTime.Parse(cellValues[i]), null); break; case "Decimal": pi.SetValue(product, Decimal.Parse(cellValues[i]), null); break; case "Double": pi.SetValue(product, Double.Parse(cellValues[i]), null); break; case "String": pi.SetValue(product, cellValues[i], null); break; } break; } } }
通过将数据展现到UI上,你可以验证你的工作 是否成功:
List<Product> products = SpreadSheetFunction.GetProducts(strFileName, "Products");
this.dataGridView1.DataSource = products;
其实对于Excel中的Table可能更有意思。因为你可以通过它来实现过滤,排序,汇总,你会感觉它特别方便(起码比Reporting Service来得快多了)。我们会再介绍如何通过更简单的办法来对Excel Table操作。
发表评论
-
java通过sftp JSch 上传文件下载文件查看文件目录,测试可用
2019-12-19 18:19 987基于maven ... -
服务器之间的 zip 文件定时传送
2019-12-19 10:28 5261、expect 安装 将expect和tcl的软 ... -
Java/web/jsp根据pdf模板生成荣誉证书PDF文件
2019-07-19 14:48 9821.前言 最近博主在 ... -
Java生成荣誉证书PDF文件
2019-07-19 13:08 1408Java生成荣誉证书PD ... -
百度云API刷脸
2019-07-13 11:41 639刷脸登录是基于人工智能、生物识别、3D传感、大数据风控技术, ... -
maven--maven配置多个源文件夹
2019-06-13 21:32 939需求 Maven 为我们提供了一致的项目目录配置(源文件 ... -
绿盟检测出“检测到目标URL存在http host头攻击漏洞”如何解决
2019-06-09 10:00 1019绿盟检测出“检测到目标URL存在http host头攻击漏 ... -
Linux安装apache及其简单的反向代理配置
2019-06-07 09:06 647Apache简介 Apache HTTP Se ... -
Linux二进制安装apache2.4.25
2019-06-07 09:06 720Linux二进制安装apache2.4. ... -
weblogic配置https,http自动跳转转https,ssl
2019-05-21 09:44 960最近,公司要求将http ... -
bootstrap-table组合表头
2019-03-06 10:04 922bootstrap-table组合表头 ... -
[Weblogic]如何清理缓存
2019-03-04 15:23 861[Weblogic]如何清理缓存 ... -
Guns第十节Swagger的讲解
2019-01-23 16:51 6532018年08月01日 15:54:30 ze ... -
Anaconda详细安装使用教程
2019-01-22 15:07 626关注微信公众号【Mi ... -
Windows系统下Eclipse上搭建Python开发环境
2019-01-22 15:00 332Windows系统下Eclipse上搭 ... -
Python 3.6 中使用pdfminer解析pdf文件
2019-01-22 14:50 937所使用python环境为最新 ... -
Python提取PDF内容(文本、图像、线条等)
2019-01-22 14:43 7551使用Python抽取PDF文件内 ... -
用python解析pdf中的文本与表格【pdfplumber的安装与使用】
2019-01-22 14:40 1540我们接触到的很多文档资料都是以pdf格式存在的,比如:论文, ... -
java实现PDF转HTML
2019-01-21 10:14 935java实现PDF转HTML 问题场景: ... -
JAVA PDFBOX 读取PDF表格
2019-01-18 17:39 2998最近在帮公司做工具,需要读取PDF中表格的数据。网上查了, ...
相关推荐
这个SDK提供了.NET Framework上的类库,允许开发者在C#、VB.NET或其他.NET语言中方便地创建、读取、修改和验证Open XML文档。 **Open XML基础知识** Open XML是微软定义的一种开放标准文件格式,它将Office文档内容...
2. **代码生成**:Open XML SDK Tool可以自动生成针对特定文档操作的C#或Visual Basic代码,这样开发者就可以在自己的应用程序中复用这些代码来创建、更新或读取Open XML文件。 3. **数据转换**:通过此工具,用户...
在IT行业中,Open XML SDK是一个重要的工具,尤其对于处理Microsoft Office文档如Word、Excel和PowerPoint时。这个SDK提供了一种编程方式,让我们能够直接操作文档的内部结构,包括其内容、样式、图表等元素。在标题...
Open XML是Microsoft Office 2007及更高版本中使用的默认文件格式,包括Word文档(.docx)、Excel工作簿(.xlsx)和PowerPoint演示文稿(.pptx)等。 OpenXML SDK(Software Development Kit)是这个工具包的核心...
EPPlus是一个流行的.NET库,用于处理Excel文件(.xlsx),它基于Open XML SDK。使用EPPlus,我们可以轻松读取Excel数据并将其写入XML。首先,确保已安装EPPlus库(通过NuGet包管理器或在项目中添加引用)。 ```...
在本文中,我们将深入探讨如何使用OpenXML库来读取Excel数据,特别关注日期和浮点型数据的处理问题。 首先,我们需要理解OpenXML的工作原理。OpenXML是基于XML的文件格式,它将Excel文档分解为多个组件,如工作簿、...
本篇文章将详细介绍如何使用Open XML SDK来读取Excel文件,尤其针对Microsoft Office 2007及更高版本的XLSX文件格式。 Open XML是一种开放标准,用于表示Microsoft Office文档,包括Excel、Word和PowerPoint。Open ...
OpenXML SDK是微软提供的一个工具库,专门用于处理Open XML格式的文档。安装完成后,我们可以通过NuGet包管理器在C#项目中引入`DocumentFormat.OpenXml`这个库。 在处理PowerPoint文档时,我们需要关注的主要类有`...
标题中的“读取Excel2007 XML文件”是指利用编程技术解析并处理Excel 2007及以上版本中使用的Open XML(开放XML)格式的数据。这种格式在Microsoft Office 2007中引入,以替代传统的二进制文件格式,如.xls。Open ...
OpenXML是一种基于XML的文件格式,广泛应用于Microsoft Office 2007及更高版本,包括Word文档(.docx)、Excel工作簿(.xlsx)和PowerPoint演示文稿(.pptx)等。 OpenXMLSDK2.5包含了两个主要的部分:OpenXMLSDKV...
EPPlus是一个流行的.NET库,它使用Open XML SDK处理Excel 2007及更高版本的文件。NPOI则是Java平台上的Apache POI库的.NET版本,同样支持Excel文件的读写。ExcelDataReader是一个轻量级的只读库,它可以直接读取...
4. Open XML SDK:另一种读取Excel文件的方法是使用Open XML SDK,这是一个由微软提供的免费工具包,可以直接操作Office文档的XML结构,无需依赖Excel应用程序。对于大型或服务器端应用,这种方式更高效且不会引发...
例如,下面的代码展示了如何使用Open XML SDK读取Excel单元格: ```csharp using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; // 打开工作簿 SpreadsheetDocument ...
- Open XML SDK读取A1单元格: ```csharp using DocumentFormat.OpenXml.Packaging; SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, false); WorksheetPart worksheetPart = document....
在C#中,我们可以使用Open XML SDK提供的类和方法来创建、读取和修改这些文件。 要将HTML转换为Word文档,我们首先需要解析HTML文件,然后将解析得到的数据结构化成Open XML格式。这通常涉及到以下几个步骤: 1. ...
如果项目允许,通常推荐使用Open XML SDK,因为它更稳定、高效,并且不受Excel安装的影响。不过,对于快速原型或简单的读取任务,使用COM Interop可能是更快捷的选择。 在压缩包"ExcelAccessSrc"中,可能包含了使用...
3. **读取Excel数据**: 使用Open XML SDK,可以方便地遍历工作表中的单元格,读取其值。例如,`Worksheet`对象包含了`SheetData`元素,`SheetData`包含了多个`Row`元素,每个`Row`又包含多个`Cell`元素。 4. **写入...
3. **将XML嵌入Excel文件**:使用Open XML SDK或VSTO(Visual Studio Tools for Office)将RibbonXML嵌入到Excel的`.xlsx`文件中。这通常涉及到找到并修改`_rels/.rels`和`[Content_Types].xml`这两个文件,以及在`...
这一课程章节专注于在.NET环境中使用Open XML SDK进行开发。Open XML SDK为.NET开发者提供了方便的API,可以直接操作Open XML文档的各个部分,无需理解底层的XML结构。课程会介绍如何安装SDK,创建项目,以及使用...
在ASP.NET环境中,开发人员经常需要处理Excel文件,例如生成报表、数据导入...无论是使用Interop、Open XML SDK还是NPOI,都需要了解其基本原理,掌握如何创建、读取、写入和操作Excel文件,以便在实际开发中灵活运用。