#应用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代码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇磁盘检验(转)死亡笔记之1:vue-cli下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[Go]将string转换为io.Reader类型

在使用很多函数的时候需要传入string字符串 , 但是函数参数类型是io.Reader , 这时候就需要将string转换为Reader类型 例如下面的: strings.NewReader("aaaa") NewReader返回从读取的新Reader。 它类似于bytes.NewBufferString,但效率更高且只读。 bytes.NewB...

loadrunner乱码问题解决办法

  7、LoadRunner回放脚本时,在浏览器显示的中文是乱码 最近,遇到了好多乱码的问题,解决了一些,还有最后一个乱码,能想到的各种办法都试过了,还是不行,很奇怪啊。 解决这些乱码时,涉及到了http头数据,不是很了解。 第一个乱码: 操作返回的提示信息:操作成功、失败原因,这样的信息返回到页面乱码。最后找到的原因是:返回的ContentType格式...

【ECMAScript5】ES5基础

一、语法 区分大小写。 变量是弱类型的,可以初始化为任意值,也可以随时改变变量所存数据的类型。 每行结尾的分号可有可无,但是建议加上。 注释 单行注释以双斜杠开头(//) 多行注释以单斜杠和星号开头(/*),以星号和单斜杠结尾(*/) 代码块:用{ } 包起来的 二、变量 使用 var (variable的缩写)运算符声明变量。 可以用一个var...

java(计算机)常见加密算法详解

  来源:http://blog.csdn.net/janronehoo/article/category/1152295  如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMA...

Activity的生命周期

今天对于Activity的生命周期又有了一点深入的理解。做个总结吧。 一、正常情况下的生命周期 什么叫正常情况下的生命周期呢?也就是我们经常了解的一个活动的正常的生命流程。不用过度解释, 总结如下: (1)onCreate()方法 活动第一次创建时被调用。 (2)onStart() 活动由不可见变为可见的时候调用 (3)onResume() 当活动准备开始...

C#把数字转换为大写金额

 private string ToBigNumber(long number)        {            // 12345 一万贰仟叁佰肆拾伍            string[] mm ={ "", "拾", "佰", "仟", "万", "拾", "佰",                           "仟", "亿", "拾"...