#应用openxml读写excel代码
这个例子比较简单,没有考虑格式之类的问题。
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
namespace JobTool
{
public class ExcelBll
{
private void GetColumnNameAndRowIndex(string cellReference, out string columnName, out UInt32 rowIndex)
{
var regex = new Regex("[A-Za-z]+");
var match = regex.Match(cellReference);
columnName = match.Value;
string s = cellReference.Replace(columnName, "");
rowIndex = UInt32.Parse(s);
}
public List<ExcelCellEntity> ReadExcel(string excelPath, int columnCount, int rowCount)
{
List<ExcelCellEntity> ret = new List<ExcelCellEntity>();
using (SpreadsheetDocument document = SpreadsheetDocument.Open(excelPath, false))
{
WorkbookPart wbPart = document.WorkbookPart;
var sheet = wbPart.Workbook.Descendants<Sheet>().FirstOrDefault();
WorksheetPart worksheet = (WorksheetPart)wbPart.GetPartById(sheet.Id);
SheetData SheetData1 = worksheet.Worksheet.Elements<SheetData>().FirstOrDefault();
foreach (var inst in SheetData1.Descendants<Cell>())
{
ExcelCellEntity entity = new ExcelCellEntity();
ret.Add(entity);
entity.Value = this.GetValue(inst, wbPart);
string columnName = "";
UInt32 rowIndex = 1;
GetColumnNameAndRowIndex(inst.CellReference, out columnName, out rowIndex);
entity.Column = columnName;
entity.Row = rowIndex;
}
}
return ret;
}
public void WriteExcel(string excelPath, List<ExcelCellEntity> datas)
{
File.Copy("blank.xlsx", excelPath, true);
List<ExcelCellEntity> ret = new List<ExcelCellEntity>();
using (SpreadsheetDocument document = SpreadsheetDocument.Open(excelPath, true))
{
WorkbookPart wbPart = document.WorkbookPart;
var sheet = wbPart.Workbook.Descendants<Sheet>().FirstOrDefault();
WorksheetPart worksheet = (WorksheetPart)wbPart.GetPartById(sheet.Id);
SheetData SheetData1 = worksheet.Worksheet.Elements<SheetData>().FirstOrDefault();
foreach (var inst in datas)
{
this.WriteExcel1(SheetData1, inst.Column, inst.Row, inst.Value);
}
wbPart.Workbook.Save();
}
}
private Cell CreateTextCell(string header, UInt32 index, string text)
{
var cell = new Cell
{
DataType = CellValues.InlineString,
CellReference = header + index
};
var istring = new InlineString();
var t = new Text { Text = text };
istring.AppendChild(t);
cell.AppendChild(istring);
return cell;
}
private void WriteExcel1(SheetData sheetData, string header, UInt32 index, string text)
{
Row r1 = sheetData.Descendants<Row>().Where(a => a.RowIndex == index).FirstOrDefault();
if (r1 == null)
{
r1 = new Row() { RowIndex = index };
sheetData.Append(r1);
}
r1.Append(CreateTextCell(header, index, text));
}
public String GetValue(Cell cell, WorkbookPart wbPart)
{
SharedStringTablePart stringTablePart = wbPart.SharedStringTablePart;
if (cell.ChildElements.Count == 0)
return null;
String value = cell.CellValue.InnerText;
if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString))
return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
return value;
}
}
}
#应用openxml读写excel代码的更多相关文章
- 一个用微软官方的OpenXml读写Excel 目前网上不太普及的方法。
新版本的xlsx是使用新的存储格式,貌似是处理过的XML. 传统的excel处理方法,我真的感觉像屎.用Oldeb不方便,用com组件要实际调用excel打开关闭,很容易出现死. 对于OpenXML我 ...
- php如何读写excel
php如何读写excel 一.总结 一句话总结:PHP操作Excel最好的方法是使用PHPExcel类, 可以到官网下载PHPExcel类库 http://phpexcel.codeplex.com ...
- MFC vs2012 Office2013 读写excel文件
近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果...废话少说,过程如下: 笔者环境:win7 64+VS2012+Office2 ...
- Python3.4如何读写Excel
在python3.x(散仙使用的版本是python3.4)里,我们应该如何操作excel. 首先在python3.4里,我们可以使用新的python类库,来支持3.x之后的读写excel 针对 03版 ...
- 用Python读写Excel文件(转)
原文:google.com/ncr 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TA ...
- 使用NPOI读写Excel、Word
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(1)入门介绍
在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装E ...
- 【原创】.NET读写Excel工具Spire.Xls使用(2)Excel文件的控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(3)单元格控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
随机推荐
- dice2win
触发交易 转0个 https://etherscan.io/tx/0x784e80167353a886183106cbe3bd15e614cafdb5d6885ccd101177aa0f937a36 ...
- 1.linux环境配置
首先说一下,这里是虚拟机环境. 1.用vbox安装centos6.8-mini 注意不要使用复制的方式安装,复制的虚拟机网络不通 安装如下: 主机 ip 角色 内存 hadoop1 192.168.0 ...
- gcc 学习笔记(一) - 编译C程序 及 编译过程
一. C程序编译过程 编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (a ...
- dataTables基础函数变量
DataTable下有四个命名空间(namespace),分别是defaults,ext,models,oApi. Defaults:主要是用于初始化表格的一些选项. Ext:拓展项,提供额外的表格选 ...
- 第二次作业 编程题 PAT 1001A+B Format
Github的object-oriented仓库:1001.A+BFormat(20) 1.解题的思路过程 在之前学习C语言时曾经碰到过类似的将数字转换成字符输出的情况,这道题目要求输出的数字每三个间 ...
- vs调试时报503错误
开发中遇到了一个神问题,困扰了几个月没解决. 在本机调试,或者用iis服务器直接指向项目目录,访问网页任何页面都是报503. 一直找不到原因,配置文件也修改了,还是解决不了. 今天20170110一次 ...
- phpcms退出 提示 :退出成功0 。 的解决办法
打开/phpcms/modules/member/index.php 搜索如下代码: showmessage(L('logout_success').$synlogoutstr, $forward); ...
- Spring IOC原理简析
所谓IoC, 就是一个用XML来定义生成对象的模式. 1.现有三个类,Human是接口,Chinese是一个实现类,American是另一个实现类. 2.获取以上对象采用工厂模式的用法如下: 创建一个 ...
- 在临床医学里面,bid、tid、qid和q3w是什么意思啊??这些缩写的全称是怎么写呢??
{ value: 'QD', name: 'QD 每日一次' }, { value: 'BID', name: 'BID 每日两次' }, { value: 'TID', name: 'TID 每日三 ...
- 第28天:js-Tab栏切换封装函数
一.input.value所有值都是string 二.变量和属性var index=10;//变量var arr=[];//数组arr.index=20;//index为自定义属性,只能在arr下使用 ...