这个例子比较简单,没有考虑格式之类的问题。

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代码的更多相关文章

  1. 一个用微软官方的OpenXml读写Excel 目前网上不太普及的方法。

    新版本的xlsx是使用新的存储格式,貌似是处理过的XML. 传统的excel处理方法,我真的感觉像屎.用Oldeb不方便,用com组件要实际调用excel打开关闭,很容易出现死. 对于OpenXML我 ...

  2. php如何读写excel

    php如何读写excel 一.总结 一句话总结:PHP操作Excel最好的方法是使用PHPExcel类, 可以到官网下载PHPExcel类库 http://phpexcel.codeplex.com ...

  3. MFC vs2012 Office2013 读写excel文件

    近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果...废话少说,过程如下: 笔者环境:win7 64+VS2012+Office2 ...

  4. Python3.4如何读写Excel

    在python3.x(散仙使用的版本是python3.4)里,我们应该如何操作excel. 首先在python3.4里,我们可以使用新的python类库,来支持3.x之后的读写excel 针对 03版 ...

  5. 用Python读写Excel文件(转)

    原文:google.com/ncr 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TA ...

  6. 使用NPOI读写Excel、Word

    NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...

  7. 【原创】.NET读写Excel工具Spire.Xls使用(1)入门介绍

    在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装E ...

  8. 【原创】.NET读写Excel工具Spire.Xls使用(2)Excel文件的控制

                  本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...

  9. 【原创】.NET读写Excel工具Spire.Xls使用(3)单元格控制

                  本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...

随机推荐

  1. 持续集成之TeamCity 配置

    xcopy /S /Y CodeFirstDemo\CodefirstDemo.Web D:\publish\welcome\Web

  2. Matlab带比较方法的快排

    首先是主方法QUCIKSORT:(从小到大排列) function [A]=QUICKSORT(A,Low,high,mdat) set(,) if Low<high [A,w]=SPLITIO ...

  3. 《C++面试知识点》

    [动态内存] 1. 由内置指针管理的动态内存(即new和delete管理动态内存),直到被显式释放之前它都是存在的.假设该指针变量被销毁,那该内存将不会自动释放(即所谓的“内存泄漏”). 2. 可以用 ...

  4. Java学习个人备忘录之多线程

    进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以有多个执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运行多部分代 ...

  5. ava中普通代码块,构造代码块,静态代码块区别及示例

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在 ...

  6. 在vue项目中使用monaco-editor

    monaco-editor: https://github.com/Microsoft/monaco-editor 在ESM中的使用官方也有对应文档:https://github.com/Micros ...

  7. 如何用grep命令同时显示匹配行上下的n行 (美团面试题目)

    标准unix/linux下的grep通过以下参数控制上下文 grep -C 5 foo file 显示file文件中匹配foo字串那行以及上下5行grep -B 5 foo file 显示foo及前5 ...

  8. iOS-开发中的时间处理

    做App避免不了要和时间打交道,关于时间的处理,里面有不少门道,远不是一行API调用,获取当前系统时间这么简单.我们需要了解与时间相关的各种API之间的差别,再因场景而异去设计相应的机制. 时间的形式 ...

  9. Go语言【第四篇】:Go运算符

    Go语言运算符 运算符用于在程序运行时执行数据或逻辑运算,Go语言内置的运算符有: 算数运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 算数运算符 下表列出了所有Go语言的算数运算符 ...

  10. Python数据定义

    数据类型: 什么是数据? 在计算机科学中,数据是指所有能输入到计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字字母.符号和模拟量等的统称.现在计算机存储和处 ...