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

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;
}
}
}

最新文章

  1. 关于java的递归写法,经典的Fibonacci数的问题
  2. get方式和set方式提交时乱码
  3. Excel导入数据库脚本
  4. Think Python - Chapter 15 - Classes and objects
  5. TP复习6
  6. js dom操作获取节点的一些方法
  7. A - Number Sequence(矩阵快速幂或者找周期)
  8. 开机启动遇到grub rescue,无法启动系统解决方法
  9. CFile类的open方法中的参数说明
  10. bootstrap日期选择
  11. Clustering[Spectral Clustering]
  12. CUDA开发
  13. Confluence 6 尝试从 XML 备份中恢复时解决错误
  14. 在 iOS 中信任手动安装的证书描述文件
  15. ulimit系统资源的设定
  16. react性能检测与优化
  17. opencv的DMatch
  18. 使用keytool 生成数字keystore
  19. 在Kubernetes上使用Traefik
  20. javascript那些不应该忽视的细节

热门文章

  1. 十一:Centralized Cache Management in HDFS 集中缓存管理
  2. wpa_supplicant与kernel交互
  3. 迭代器类型:iterator &amp; const_iterator
  4. StrBlob类——智能指针作为成员
  5. Catch That Cow(BFS广搜)
  6. C/C++打印堆栈信息
  7. Python35 升级 pip
  8. Windows 8.1 SecureBoot未正确配置的解决方法
  9. RT-thread内核之内核对象模型
  10. Django 2.0 学习(09):Django 静态文件(样式和背景图片)