https://openxmlexporttoexcel.codeplex.com/

http://referencesource.microsoft.com/

引用:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DocumentFormat.OpenXml;//2.0 OpenXml SDK 2.0 2.5 2.6
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.IO.Packaging;
using System.IO;
using System.Xml;
using ClosedXML.Excel; //http://closedxml.codeplex.com/ 3.5 and 4.0 .net framework

  

  string filename = "20160816000.xlsx";//220160815  //Book1 涂聚文测试注:这两个文件的工作内容一样  2016081600011.xlsx 此文件21KB  20160816000.xlsx  此文件容量19.1M 不规则并有隐藏列,出现读取列问题,只能用System.Data.OleDb.OleDbConnection
string sheename = "";
/// <summary>
///
/// </summary>
public OpenXmlSdkForm()
{
InitializeComponent();
}
/// <summary>
/// http://closedxml.codeplex.com/
/// </summary>
/// <param name="dt"></param>
/// <param name="fileName"></param>
public void ExportDataToExcel(DataTable dt, string fileName)
{
using (XLWorkbook wb = new XLWorkbook())
{ var ws = wb.Worksheets.Add(dt, "ws"); // worksheets name must be added.
wb.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
wb.Style.Font.Bold = true; //set header style
ws.Rows(1, 1).Style.Fill.BackgroundColor = XLColor.White;
ws.Rows(1, 1).Style.Font.Bold = true;
ws.Rows(1, 1).Style.Font.FontColor = XLColor.Onyx;
ws.Columns().Width = 20; //remove AutoFilter
ws.Tables.FirstOrDefault().ShowAutoFilter = false;
// winform 用法
wb.SaveAs(filename);
//webform 用法
//Response.Clear();
//Response.Buffer = true;
//Response.Charset = "utf-8";
//Response.ContentType = "application/vnd.ms-excel";
//Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); //using (MemoryStream MyMemoryStream = new MemoryStream())
//{
// wb.SaveAs(MyMemoryStream);
// MyMemoryStream.WriteTo(Response.OutputStream);
// Response.Flush();
// Response.End();
//}
}
}
/// <summary>
///
/// </summary>
/// <param name="filePath"></param>
public void ImportExcel(string filePath,string sheetnaem)
{
//Open the Excel file using ClosedXML.
using (XLWorkbook workBook = new XLWorkbook(filePath))
{
//Read the first Sheet from Excel file.
IXLWorksheet workSheet = workBook.Worksheet(sheetnaem);//sheetid //Create a new DataTable.
DataTable dt = new DataTable(); //Loop through the Worksheet rows.
bool firstRow = true;
foreach (IXLRow row in workSheet.Rows())
{
//Use the first row to add columns to DataTable.
if (firstRow)
{
foreach (IXLCell cell in row.Cells())
{
dt.Columns.Add(cell.Value.ToString());
}
firstRow = false;
}
else
{
//Add rows to DataTable.
dt.Rows.Add();
int i = 0;
foreach (IXLCell cell in row.Cells())
{
dt.Rows[dt.Rows.Count - 1][i] = cell.Value.ToString();
i++;
}
} dataGridView1.DataSource = dt; }
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OpenXmlSdkForm_Load(object sender, EventArgs e)
{
getCombox(filename, comboBox1); ImportExcel(filename,this.comboBox1.SelectedValue.ToString()); }

  

  /// <summary>
/// 涂聚文//hide column C
/// s.SetColumnHidden(2,true); https://msdn.microsoft.com/en-us/library/office/ff956189(v=office.14).aspx
/// //hide IRow 2
/// r2.ZeroHeight = true;
/// 否隐藏(isColumnHidden)
/// 20150820
/// 七夕节 涂聚文注: 隐瞒列读不出来
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="sheetName">工作表名</param>
/// <returns></returns>
public static DataTable ReadIdDataTable(string fileName, string sheetName)
{ DataTable dataTable = new DataTable();
try
{
using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(fileName, false))
{
WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart; // spreadSheetDocument.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true;
// spreadSheetDocument.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true; //spreadSheetDocument.WorkbookPart.Workbook.Sheets;
Sheet theSheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName).FirstOrDefault(); //IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();//第一个工作表
//string relationshipId = theSheet.FirstOrDefault().ExtendedAttributes.ElementAt(0); //工作表
// numID = sheets.Count();
WorksheetPart worksheetPart = (WorksheetPart)spreadSheetDocument.WorkbookPart.GetPartById(theSheet.Id);//第一个工作表 Worksheet workSheet = worksheetPart.Worksheet;
SheetData sheetData = workSheet.GetFirstChild<SheetData>();
//IEnumerable<Row> rows = sheetData.Descendants<Row>();
IEnumerable<Row> rows = sheetData.Descendants<Row>(); // //
// var list = sheetData.Descendants<Row>().Where((r) => r.Hidden != null && r.Hidden.Value).Select(r => r.RowIndex.Value).ToList<uint>(); //
//foreach (Cell cell in rows.ElementAt(0))
//{
// dataTable.Columns.Add(GetCellValue(spreadSheetDocument, cell)); //标题
//}
for (int j = 0; j < 59; j++)
{
dataTable.Columns.Add(j.ToString(), typeof(string));
}
foreach (Row row in rows)
{
DataRow dataRow = dataTable.NewRow();
//隐藏的列未显示
//for (int i = 0; i < row.Descendants<Cell>().Count(); i++)
//{
// dataRow[i] = GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i));
//}
for (int i = 0; i < row.Descendants<Cell>().Count(); i++)
{ //if (row.Hidden == true)
//{
// dataRow[i] = GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i));
//}
//else
//{ dataRow[i] = GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i)); //}
} //row.getZeroHeight() dataTable.Rows.Add(dataRow);
} }
dataTable.Rows.RemoveAt(0);
}
catch (Exception ex)
{
ex.Message.ToString();
}
return dataTable;
}
/// <summary>
///
/// </summary>
/// <param name="FileName"></param>
/// <param name="columnNumber"></param>
public void HideColumn(string FileName, UInt32Value columnNumber)
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(
FileName, true))
{
IEnumerable<Sheet> sheets = document.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet1");
if (sheets.Count() == 0)
{
// The specified worksheet does not exist.
return;
}
WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheets.First().Id);
Worksheet worksheet = worksheetPart.Worksheet;
Columns columns1 = GenerateColumns(columnNumber);
// The column element is behind the SheetFormatProperties element.
worksheet.InsertAfter(columns1, worksheet.SheetFormatProperties);
worksheet.Save();
}
}
// Creates an Columns instance and adds its children.
public Columns GenerateColumns(UInt32Value ColumnIndex)
{
Columns columns1 = new Columns();
Column column1 = new Column() { Min = ColumnIndex, Max = ColumnIndex, Width = 0D, Hidden = true, CustomWidth = true };
columns1.Append(column1);
return columns1;
}
/// <summary>
/// Reads the specified file save path.
/// </summary>
/// <param name="fileSavePath">The file save path.</param>
/// <returns></returns>
public DataSet Read(string fileSavePath)
{ DataSet resultSet = new DataSet(); using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(fileSavePath, false))
{ WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart;
IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>(); foreach (Sheet sheet in sheets)
{
DataTable dt = new DataTable(); string relationshipId = sheet.Id.Value;
string sheetName = sheet.SheetId;
dt.TableName = sheet.SheetId; WorksheetPart worksheetPart =
(WorksheetPart) spreadSheetDocument.WorkbookPart.GetPartById(relationshipId);
Worksheet workSheet = worksheetPart.Worksheet;
SheetData sheetData = workSheet.GetFirstChild<SheetData>();
IEnumerable<Row> rows = sheetData.Descendants<Row>(); foreach (Cell cell in rows.ElementAt(0))
{
dt.Columns.Add(GetCellValue(spreadSheetDocument, cell));
} List<Row> rowsList = new List<Row>(); rowsList = rows.ToList(); //Start from 1, first row is header.
for ( int iterRowIndex = 1 ; iterRowIndex < rowsList.Count ; iterRowIndex ++) //this will also include your header row…
{
Row row = rowsList[iterRowIndex]; DataRow tempRow = dt.NewRow(); for (int i = 0; i < row.Descendants<Cell>().Count(); i++)
{
tempRow[i] = GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i));
} dt.Rows.Add(tempRow);
} resultSet.Tables.Add(dt);
} } return resultSet;
} /// <summary>
///
/// </summary>
/// <param name="document"></param>
/// <param name="cell"></param>
/// <returns></returns>
private static string GetCellValue(SpreadsheetDocument document, Cell cell)
{
//try
//{
SharedStringTablePart stringTablePart = document.WorkbookPart.SharedStringTablePart;
string value = cell.CellValue.InnerXml; if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
{
return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
}
else
{
return value;
}
///
//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; //}
//catch (Exception ex)
//{
// ex.Message.ToString();
// return "";
//}
}
/// <summary>
///
/// </summary>
/// <param name="fileName"></param>
static void read2(string fileName)
{
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(fs, false))
{
WorkbookPart workbookPart = doc.WorkbookPart;
SharedStringTablePart sstpart = workbookPart.GetPartsOfType<SharedStringTablePart>().First();
SharedStringTable sst = sstpart.SharedStringTable; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
Worksheet sheet = worksheetPart.Worksheet; var cells = sheet.Descendants<Cell>();
var rows = sheet.Descendants<Row>(); MessageBox.Show(string.Format("Row count = {0}", rows.Count())); //LongCount
MessageBox.Show(string.Format("Cell count = {0}", cells.Count()));//LongCount // One way: go through each cell in the sheet
foreach (Cell cell in cells)
{
if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString))
{
int ssid = int.Parse(cell.CellValue.Text);
string str = sst.ChildElements[ssid].InnerText;
string.Format("Shared string {0}: {1}", ssid, str);
}
else if (cell.CellValue != null)
{
string.Format("Cell contents: {0}", cell.CellValue.Text);
}
} // Or... via each row
foreach (Row row in rows)
{
foreach (Cell c in row.Elements<Cell>())
{
if ((c.DataType != null) && (c.DataType == CellValues.SharedString))
{
int ssid = int.Parse(c.CellValue.Text);
string str = sst.ChildElements[ssid].InnerText;
string.Format("Shared string {0}: {1}", ssid, str);
}
else if (c.CellValue != null)
{
string.Format("Cell contents: {0}", c.CellValue.Text);
}
}
}
}
}
} /// <summary>
///
/// </summary>
/// <param name="filename"></param>
/// <param name="combox"></param>
/// <returns></returns>
public static DataTable getCombox(string filename, ComboBox combox)
{ DataTable dt = new DataTable();
List<SheetNameInfo> sheetinfo = new List<SheetNameInfo>();
sheetinfo = GetSheets(filename);
combox.DataSource = sheetinfo;
combox.ValueMember = "SheetName";
combox.DisplayMember = "SheetName";
//dt=ReadIdDataTable(filename, sheetinfo[0].SheetName);
return dt; }
/// <summary>
/// 读取工作表名 涂聚文注
/// EXCEL 2007版以上
/// </summary>
/// <param name="strFileName"></param>
/// <returns></returns>
public static List<SheetNameInfo> GetSheets(String strFileName)
{
string id = string.Empty;
// Fill this collection with a list of all the sheets.
List<SheetNameInfo> sheets = new List<SheetNameInfo>();
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);
int k = 0;
foreach (XmlNode node in nodelist)
{
SheetNameInfo sheetNameInfo = new SheetNameInfo();
String sheetName = String.Empty;
sheetName = node.Attributes["name"].Value;
// id = node.Attributes["id"].Value;
sheetNameInfo.SheetID = int.Parse(node.Attributes["sheetId"].Value.ToString());
sheetNameInfo.Rid = node.Attributes["r:id"].Value;
sheetNameInfo.SheetName = sheetName;
sheets.Add(sheetNameInfo);
k++;
}
}
return sheets;
}
/// <summary>
///
/// </summary>
/// <param name="strFileName"></param>
/// <returns></returns>
public static List<String> GetStringSheets(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; }

  

    /// <summary>
///读取工作表名
/// </summary>
public class SheetNameInfo
{
private int _sheetId;
private string _sheetName; private string _rid; /// <summary>
///
/// </summary>
public int SheetID
{
get { return _sheetId; }
set { _sheetId = value; }
}
/// <summary>
///
/// </summary>
public string SheetName
{
get { return _sheetName; }
set { _sheetName = value; }
}
/// <summary>
///
/// </summary>
public string Rid
{
get { return _rid; }
set { _rid = value; }
}
}

  

csharp:using OpenXml SDK 2.0 and ClosedXML read excel file的更多相关文章

  1. OpenXml SDK 2.0 创建Word文档 添加页、段落、页眉和页脚

    using (WordprocessingDocument objWordDocument = WordprocessingDocument.Create(@"C:\********.doc ...

  2. NetSuite SuiteScript 2.0 export data to Excel file(xls)

    In NetSuite SuiteScript, We usually do/implement export data to CSV, that's straight forward: Collec ...

  3. OpenXml Sdk 根据Word模板导出到word

    一:OpenXml Sdk 简介 Open XML标准的简单介绍:Ecma Office Open XML(“Open XML”)是针对字处理文档.演示文稿和电子表格的国际化开放标准,可免费供多个应用 ...

  4. [Office][C#] NPOI、OpenXML SDK、OpenOffice.org SDK 写入资料到 EXCEL 档案[转]

    原文地址:http://www.dotblogs.com.tw/chou/archive/2010/04/29/14912.aspx 一.簡介 要將資料寫入 EXCEL 檔案有許多的方法,但假如電腦不 ...

  5. Csharp: read excel file using Open XML SDK 2.5

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. Embedding Documents in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Office

    Download the sample code This visual how-to article presents a solution that creates a Word 2007 doc ...

  7. 其于OpenXml SDK写的帮助类

    /// <summary> /// 其于OpenXml SDK写的帮助类 /// </summary> public static class OpenXmlHelper { ...

  8. 如何在VMware中安装Windows Phone SDK 8.0 (支持模拟器调试)

    相信很多开发者目前的系统还是Win7或Mac,一般不会为了开发某个程序而重装系统,所以我们就需要用到VMware这类的虚拟机来模拟预期的开发环境.在开始介绍前,给大家说明下我当前的软硬件环境,本文所讲 ...

  9. 原因是未找到“sgen.exe”,或未安装 .NET Framework SDK v2.0

    visual studio编译出现错误:错误 2 任务失败,原因是未找到“sgen.exe”,或未安装 .NET Framework SDK v2.0.该任务正在注册表项 HKEY_LOCAL_MAC ...

随机推荐

  1. SWF READER 破解日志。

    网上传闻swf reader是破解最厉害的神器,可以内存抓取+doSWF反编译.所以去官网下了一个: SWF_Reader_2.3 不出所料,demo版本没有反编译的功能.网上搜到一个哥们尝试了下: ...

  2. Field 'id' doesn't have a default value

    首先原因在于没有设置主键自增长. mysql的自增长模式是IDENTITY. jpa标签: @Id @GeneratedValue(strategy=GenerationType.IDENTITY) ...

  3. MVVM架构~knockoutjs实现简单的购物车

    返回目录 概念相关 购物车相信大家都用过,很方便,可以将多个商品添加到购物车,并且可以修改购买商品的数据,当然为了用户体验好,在修改数据时,你的价格也会出现变化的,这使用JS可以实现,但我认为,代码量 ...

  4. EF架构~AutoMapper对象映射工具简化了实体赋值的过程

    回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...

  5. git忽略以点开头的文件夹

    git忽略以点开头的文件夹 好像不是什么问题,可是我用的时候不好使,还是记录下 参考:http://www.oschina.net/question/1437985_2181276

  6. Apache多站点实现原理和配置

    Apache多站点实现原理 很多人常常看到一台服务器上跑多个站点,不同的域名访问不同的站点,就会有个疑惑:访问的时候并没有在地址栏中加入端口号,多个域名都是解析到这个服务器的IP地址,服务器怎么能够正 ...

  7. CooMark网页颜色取色表

    CooMark网页颜色取色表 艾利斯兰 - #F0F8FF - aliceblue 古董白 - #FAEBD7 - antiquewhite 浅绿色 - #00FFFF - aqua 碧绿色 - #7 ...

  8. Mybatis中SqlMapper配置的扩展与应用(1)

    奋斗了好几个晚上调试程序,写了好几篇博客,终于建立起了Mybatis配置的扩展机制.虽然扩展机制是重要的,然而如果没有真正实用的扩展功能,那也至少是不那么鼓舞人心的,这篇博客就来举几个扩展的例子. 这 ...

  9. 深入理解CSS径向渐变radial-gradient

    × 目录 [1]定义 [2]椭圆圆心 [3]椭圆类型 [4]椭圆大小 [5]色标 [6]重复渐变 [7]其他 前面的话 上篇介绍了线性渐变,本文接着介绍径向渐变的内容 定义 径向渐变,实际上就是椭圆渐 ...

  10. 算法与数据结构(2)--英雄会第三届在线编程大赛:几个bing

    基础知识的回顾不再写到这里面了,会写一些算法算法的解答或者读一些相关书籍的笔记. 今天做了一道算法题,来自微软必应·英雄会第三届在线编程大赛:几个bing? 做出来了...但不知道为啥执行测试用例失败 ...