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 System.IO; using System.Xml; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using DocumentFormat.OpenXml.Spreadsheet; namespace OpenXmlOficeDemo { /// <summary> /// Open XML SDK 2.0 for Microsoft Office http://www.microsoft.com/en-us/download/details.aspx?id=5124 /// Open XML SDK 2.5 for Microsoft Office http://www.microsoft.com/en-us/download/details.aspx?id=30425 /// Open XML SDK open source https://github.com/officedev/open-xml-sdk /// Open XML SDK 2.5 类库参考 https://msdn.microsoft.com/ZH-CN/library/gg278315.aspx /// http://openxmldeveloper.org/ /// https://github.com/OfficeDev/Open-Xml-PowerTools /// https://msdn.microsoft.com/en-us/library/office/bb448854.aspx /// https://github.com/OfficeDev
///https://msdn.microsoft.com/en-us/library/dd452407(v=office.12).aspxhttps://msdn.microsoft.com/en-us/library/dd452407(v=office.12).aspx /// </summary> public partial class Form1 : Form { /// <summary> /// /// </summary> public Form1() { InitializeComponent(); } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { } /// <summary> /// /// </summary> public class Package { public string Company { get; set; } public double Weight { get; set; } public long TrackingNumber { get; set; } public DateTime DateOrder { get; set; } public bool HasCompleted { get; set; } } /// <summary> /// 生成EXCEL文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { string timeMark = DateTime.Now.ToString("yyyyMMddHHmmss"); string excelPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "geovindu" + timeMark + ".xlsx"); List<Package> packages = new List<Package> { new Package { Company = "Coho Vineyard", Weight = 25.2, TrackingNumber = 89453312L, DateOrder = DateTime.Today, HasCompleted = false }, new Package { Company = "Lucerne Publishing", Weight = 18.7, TrackingNumber = 89112755L, DateOrder = DateTime.Today, HasCompleted = false }, new Package { Company = "Wingtip Toys", Weight = 6.0, TrackingNumber = 299456122L, DateOrder = DateTime.Today, HasCompleted = false }, new Package { Company = "Adventure Works", Weight = 33.8, TrackingNumber = 4665518773L, DateOrder = DateTime.Today.AddDays(-4), HasCompleted = true }, new Package { Company = "Test Works", Weight = 35.8, TrackingNumber = 4665518774L, DateOrder = DateTime.Today.AddDays(-2), HasCompleted = true }, new Package { Company = "Good Works", Weight = 48.8, TrackingNumber = 4665518775L, DateOrder = DateTime.Today.AddDays(-1), HasCompleted = true }, }; List<string> headerNames = new List<string> { "Company", "Weight", "Tracking Number", "Date Order", "Completed" }; ExcelFacade excelFacade = new ExcelFacade(); excelFacade.Create<Package>(excelPath, packages, "Packages", headerNames); } /// <summary> /// 读取工作表 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { string file = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Sample.xlsx"); List<SheetNameInfo> sheets = new List<SheetNameInfo>(); sheets = GetSheetsDu(file); this.comboBox1.DataSource = sheets; comboBox1.DisplayMember = "SheetName"; comboBox1.ValueMember = "SheetID"; //1 //OpenXmlOficeDemo.SLExcelUtility.SLExcelReader read = new SLExcelUtility.SLExcelReader(); //var data = (new OpenXmlOficeDemo.SLExcelUtility.SLExcelReader()).ReadExcel(file); //this.dataGridView1.DataSource = data.DataRows; //2 //FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read); //DataTable dt = ReadAsDataTable(file); //this.dataGridView1.DataSource = dt; // fs.Close(); // fs.Dispose(); } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { string file = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Sample.xlsx"); //FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read); DataTable dt = ReadAsDataTable(file);// ReadExcel(this.comboBox1.SelectedText, fs); this.dataGridView1.DataSource = dt; //fs.Close(); //fs.Dispose(); } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button4_Click(object sender, EventArgs e) { DataSet ds = new DataSet(); string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Sample.xlsx"); SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, false); // var sheets = document.WorkbookPart.Workbook.Descendants<Sheet>(); var sheets = document.WorkbookPart.Workbook.Sheets; foreach (Sheet sheet in sheets) { //sheet.Id // sheet.Name // sheet.SheetId foreach (var attr in sheet.GetAttributes()) { Console.WriteLine("{0}: {1}", attr.LocalName, attr.Value);//工作表名 } } WorkbookPart wbPart = document.WorkbookPart; ; //SharedStringTable sharedStringTable = wbPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault().SharedStringTable; // SharedStringTable sharedStringTable = document.WorkbookPart.SharedStringTablePart.SharedStringTable; string cellValue = null; foreach (WorksheetPart worksheetPart in document.WorkbookPart.WorksheetParts) { //foreach (Sheet sheet in sheets) foreach (SheetData sheetData in worksheetPart.Worksheet.Elements<SheetData>()) { DataTable dataTable = new DataTable(); if (sheetData.HasChildren) { foreach (Row row in sheetData.Elements<Row>()) { //foreach (Cell cell in row.ElementAt(0)) //{ // dataTable.Columns.Add(GetCellValue(document, cell)); //标题 // string tile= GetCellValue(document, cell); //标题 // MessageBox.Show(tile); //} foreach (Cell cell in row.Elements<Cell>()) { //string tile= GetCellValue(document, cell); //标题 // MessageBox.Show(tile); cellValue = cell.InnerText; if (cell.DataType == CellValues.SharedString) { Console.WriteLine("cell val: " );//+ sharedStringTable.ElementAt(Int32.Parse(cellValue)).InnerText); } else { Console.WriteLine("cell val: " + cellValue); } } } } } } document.Close(); } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button5_Click(object sender, EventArgs e) { try { string file = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Sample.xlsx"); DataTable dt = new DataTable(); string sheename = this.comboBox1.Text; dt = ReadIdDataTable(file, sheename); this.dataGridView1.DataSource = dt; } catch (Exception ex) { ex.Message.ToString(); } } /// <summary> /// 读取工作表名 /// 涂聚文 /// </summary> /// <param name="strFileName"></param> /// <returns></returns> public static List<SheetNameInfo> GetSheetsDu(String strFileName) { List<SheetNameInfo> sheetinfo = new List<SheetNameInfo>(); using (SpreadsheetDocument document = SpreadsheetDocument.Open(strFileName, false)) { var sheets = document.WorkbookPart.Workbook.Sheets; int k = 0; foreach (Sheet sheet in sheets) { SheetNameInfo sheetNameInfo = new SheetNameInfo(); sheetNameInfo.SheetName = sheet.Name; sheetNameInfo.Rid = sheet.Id; sheetNameInfo.SheetID = k;// sheetinfo.Add(sheetNameInfo); k++; } } return sheetinfo; } /// <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="cell"></param> /// <param name="stringTablePart"></param> /// <returns></returns> public static String GetValue(Cell cell, SharedStringTablePart stringTablePart) { 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; } /// <summary> /// /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static DataTable ReadAsDataTable(string fileName) { int numID = 0; DataTable dataTable = new DataTable(); using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(fileName, false)) { WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart; //spreadSheetDocument.WorkbookPart.Workbook.Sheets; IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();//第一个工作表 string relationshipId = sheets.First().Id.Value; //工作表 numID = sheets.Count(); 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)) { dataTable.Columns.Add(GetCellValue(spreadSheetDocument, cell)); //标题 } 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)); } dataTable.Rows.Add(dataRow); } } dataTable.Rows.RemoveAt(0); return dataTable; } /// <summary> /// 涂聚文 /// 20150820 /// 七夕节 /// </summary> /// <param name="fileName">文件名</param> /// <param name="sheetName">工作表名</param> /// <returns></returns> public static DataTable ReadIdDataTable(string fileName, string sheetName) { DataTable dataTable = new DataTable(); using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(fileName, false)) { WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart; //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>(); foreach (Cell cell in rows.ElementAt(0)) { dataTable.Columns.Add(GetCellValue(spreadSheetDocument, cell)); //标题 } 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)); } dataTable.Rows.Add(dataRow); } } dataTable.Rows.RemoveAt(0); return dataTable; } /// <summary> /// /// </summary> /// <param name="document"></param> /// <param name="cell"></param> /// <returns></returns> private static string GetCellValue(SpreadsheetDocument document, Cell cell) { 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; } } /// <summary> /// /// </summary> /// <param name="fileName"></param> /// <param name="sheetName"></param> /// <param name="addressName"></param> /// <returns></returns> private static string GetCellValue(string fileName, string sheetName, string addressName) { string value = null; using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false)) { WorkbookPart wbPart = document.WorkbookPart; // Find the sheet with the supplied name, and then use that Sheet // object to retrieve a reference to the appropriate worksheet. Sheet theSheet = wbPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName).FirstOrDefault(); if (theSheet == null) { throw new ArgumentException("sheetName"); } // Retrieve a reference to the worksheet part, and then use its // Worksheet property to get a reference to the cell whose // address matches the address you supplied: WorksheetPart wsPart = (WorksheetPart)(wbPart.GetPartById(theSheet.Id)); Cell theCell = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault(); // If the cell does not exist, return an empty string: if (theCell != null) { value = theCell.InnerText; // If the cell represents a numeric value, you are done. // For dates, this code returns the serialized value that // represents the date. The code handles strings and Booleans // individually. For shared strings, the code looks up the // corresponding value in the shared string table. For Booleans, // the code converts the value into the words TRUE or FALSE. if (theCell.DataType != null) { switch (theCell.DataType.Value) { case CellValues.SharedString: // For shared strings, look up the value in the shared // strings table. var stringTable = wbPart. GetPartsOfType<SharedStringTablePart>().FirstOrDefault(); // If the shared string table is missing, something is // wrong. Return the index that you found in the cell. // Otherwise, look up the correct text in the table. if (stringTable != null) { value = stringTable.SharedStringTable. ElementAt(int.Parse(value)).InnerText; } break; case CellValues.Boolean: switch (value) { case "0": value = "FALSE"; break; default: value = "TRUE"; break; } break; } } } } return value; }
/// <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; } } }
internal class ExcelHelper { internal class ColumnCaption { private static string[] Alphabets = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; private static ColumnCaption instance = null; private List<string> cellHeaders = null; public static ColumnCaption Instance { get { if (instance == null) return new ColumnCaption(); else return ColumnCaption.Instance; } } public ColumnCaption() { this.InitCollection(); } private void InitCollection() { cellHeaders = new List<string>(); foreach (string sItem in Alphabets) cellHeaders.Add(sItem); foreach (string item in Alphabets) foreach (string sItem in Alphabets) cellHeaders.Add(item + sItem); } /// <summary> /// Returns the column caption for the given row & column index. /// </summary> /// <param name="rowIndex">Index of the row.</param> /// <param name="columnIndex">Index of the column.</param> /// <returns></returns> internal string Get(int rowIndex, int columnIndex) { return this.cellHeaders.ElementAt(columnIndex) + (rowIndex + 1).ToString(); } } internal string ExportToExcel(DataTable table) { string excelfile = Path.GetTempPath() + Guid.NewGuid().ToString() + ".xlsx"; using (SpreadsheetDocument excelDoc = SpreadsheetDocument.Create(excelfile, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook)) { CreateExcelParts(excelDoc, table); } return excelfile; } private void CreateExcelParts(SpreadsheetDocument spreadsheetDoc, DataTable data) { WorkbookPart workbookPart = spreadsheetDoc.AddWorkbookPart(); CreateWorkbookPart(workbookPart); int workBookPartCount = 1; WorkbookStylesPart workbookStylesPart = workbookPart.AddNewPart<WorkbookStylesPart>("rId" + (workBookPartCount++).ToString()); CreateWorkbookStylesPart(workbookStylesPart); WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>("rId" + (101).ToString()); CreateWorksheetPart(workbookPart.WorksheetParts.ElementAt(0), data); SharedStringTablePart sharedStringTablePart = workbookPart.AddNewPart<SharedStringTablePart>("rId" + (workBookPartCount++).ToString()); CreateSharedStringTablePart(sharedStringTablePart, data); workbookPart.Workbook.Save(); } /// <summary> /// Creates the shared string table part. /// </summary> /// <param name="sharedStringTablePart">The shared string table part.</param> /// <param name="sheetData">The sheet data.</param> private void CreateSharedStringTablePart(SharedStringTablePart sharedStringTablePart, DataTable sheetData) { UInt32Value stringCount = Convert.ToUInt32(sheetData.Rows.Count) + Convert.ToUInt32(sheetData.Columns.Count); SharedStringTable sharedStringTable = new SharedStringTable() { Count = stringCount, UniqueCount = stringCount }; for (int columnIndex = 0; columnIndex < sheetData.Columns.Count; columnIndex++) { SharedStringItem sharedStringItem = new SharedStringItem(); Text text = new Text(); text.Text = sheetData.Columns[columnIndex].ColumnName; sharedStringItem.Append(text); sharedStringTable.Append(sharedStringItem); } for (int rowIndex = 0; rowIndex < sheetData.Rows.Count; rowIndex++) { SharedStringItem sharedStringItem = new SharedStringItem(); Text text = new Text(); text.Text = sheetData.Rows[rowIndex][0].ToString(); sharedStringItem.Append(text); sharedStringTable.Append(sharedStringItem); } sharedStringTablePart.SharedStringTable = sharedStringTable; } /// <summary> /// Creates the worksheet part. /// </summary> /// <param name="worksheetPart">The worksheet part.</param> /// <param name="data">The data.</param> private void CreateWorksheetPart(WorksheetPart worksheetPart, DataTable data) { Worksheet worksheet = new Worksheet() { MCAttributes = new MarkupCompatibilityAttributes() { Ignorable = "x14ac" } }; worksheet.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"); worksheet.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006"); worksheet.AddNamespaceDeclaration("x14ac", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"); SheetViews sheetViews = new SheetViews(); SheetView sheetView = new SheetView() { WorkbookViewId = (UInt32Value)0U }; Selection selection = new Selection() { ActiveCell = "A1" }; sheetView.Append(selection); sheetViews.Append(sheetView); PageMargins pageMargins = new PageMargins() { Left = 0.7D, Right = 0.7D, Top = 0.75D, Bottom = 0.75D, Header = 0.3D, Footer = 0.3D }; SheetFormatProperties sheetFormatPr = new SheetFormatProperties() { DefaultRowHeight = 15D, DyDescent = 0.25D }; SheetData sheetData = new SheetData(); UInt32Value rowIndex = 1U; Row row1 = new Row() { RowIndex = rowIndex++, Spans = new ListValue<StringValue>() { InnerText = "1:3" }, DyDescent = 0.25D }; for (int columnIndex = 0; columnIndex < data.Columns.Count; columnIndex++) { Cell cell = new Cell() { CellReference = ExcelHelper.ColumnCaption.Instance.Get((Convert.ToInt32((UInt32)rowIndex) - 2), columnIndex), DataType = CellValues.String }; CellValue cellValue = new CellValue(); cellValue.Text = data.Columns[columnIndex].ColumnName.ToString().FormatCode(); cell.Append(cellValue); row1.Append(cell); } sheetData.Append(row1); for (int rIndex = 0; rIndex < data.Rows.Count; rIndex++) { Row row = new Row() { RowIndex = rowIndex++, Spans = new ListValue<StringValue>() { InnerText = "1:3" }, DyDescent = 0.25D }; for (int cIndex = 0; cIndex < data.Columns.Count; cIndex++) { if (cIndex == 0) { Cell cell = new Cell() { CellReference = ExcelHelper.ColumnCaption.Instance.Get((Convert.ToInt32((UInt32)rowIndex) - 2), cIndex), DataType = CellValues.String }; CellValue cellValue = new CellValue(); cellValue.Text = data.Rows[rIndex][cIndex].ToString(); cell.Append(cellValue); row.Append(cell); } else { Cell cell = new Cell() { CellReference = ExcelHelper.ColumnCaption.Instance.Get((Convert.ToInt32((UInt32)rowIndex) - 2), cIndex), DataType = CellValues.String }; CellValue cellValue = new CellValue(); cellValue.Text = data.Rows[rIndex][cIndex].ToString(); cell.Append(cellValue); row.Append(cell); } } sheetData.Append(row); } worksheet.Append(sheetViews); worksheet.Append(sheetFormatPr); worksheet.Append(sheetData); worksheet.Append(pageMargins); worksheetPart.Worksheet = worksheet; } /// <summary> /// Creates the workbook styles part. /// </summary> /// <param name="workbookStylesPart">The workbook styles part.</param> private void CreateWorkbookStylesPart(WorkbookStylesPart workbookStylesPart) { Stylesheet stylesheet = new Stylesheet() { MCAttributes = new MarkupCompatibilityAttributes() { Ignorable = "x14ac" } }; stylesheet.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006"); stylesheet.AddNamespaceDeclaration("x14ac", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"); StylesheetExtensionList stylesheetExtensionList = new StylesheetExtensionList(); StylesheetExtension stylesheetExtension = new StylesheetExtension() { Uri = "{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" }; stylesheetExtension.AddNamespaceDeclaration("x14", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"); DocumentFormat.OpenXml.Office2010.Excel.SlicerStyles slicerStyles = new DocumentFormat.OpenXml.Office2010.Excel.SlicerStyles() { DefaultSlicerStyle = "SlicerStyleLight1" }; stylesheetExtension.Append(slicerStyles); stylesheetExtensionList.Append(stylesheetExtension); stylesheet.Append(stylesheetExtensionList); workbookStylesPart.Stylesheet = stylesheet; } /// <summary> /// Creates the workbook part. /// </summary> /// <param name="workbookPart">The workbook part.</param> private void CreateWorkbookPart(WorkbookPart workbookPart) { Workbook workbook = new Workbook(); Sheets sheets = new Sheets(); Sheet sheet = new Sheet() { Name = "Book" + 1, SheetId = Convert.ToUInt32(101), Id = "rId" + (101).ToString() }; sheets.Append(sheet); CalculationProperties calculationProperties = new CalculationProperties() { CalculationId = (UInt32Value)123456U // some default Int32Value }; workbook.Append(sheets); workbook.Append(calculationProperties); workbookPart.Workbook = workbook; } } public static class Extensions { public static string FormatCode(this string sourceString) { if (sourceString.Contains("<")) sourceString = sourceString.Replace("<", "<"); if (sourceString.Contains(">")) sourceString = sourceString.Replace(">", ">"); return sourceString; } }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindGrid(); } SetChache(); } private void SetChache() { Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetExpires(DateTime.Now.AddYears(1)); } private void BindGrid() { grdvTest.DataSource = new TestData().GetSampleData(); grdvTest.DataBind(); } protected void btnExport_Click(object sender, EventArgs e) { DataTable table = new DataTable(); CreateTable(grdvTest, ref table); string file = new ExcelHelper().ExportToExcel(table); string rootPath = HttpContext.Current.Server.MapPath("~").ToString(); string localCopy = Guid.NewGuid().ToString() + ".xlsx"; File.Copy(file, rootPath + localCopy); Response.Redirect(localCopy); } private void CreateTable(GridView grdvTest, ref DataTable table) { // create columns for (int i = 0; i < grdvTest.HeaderRow.Cells.Count; i++) table.Columns.Add(grdvTest.HeaderRow.Cells[i].Text); // fill rows foreach (GridViewRow row in grdvTest.Rows) { DataRow dr; dr = table.NewRow(); for (int i = 0; i < row.Cells.Count; i++) { dr[i] = row.Cells[i].Text.Replace(" ", " "); } table.Rows.Add(dr); } }
https://openxmlexporttoexcel.codeplex.com/
http://www.codeproject.com/Tips/366446/Export-GridView-Data-to-Excel-using-OpenXml
http://www.codeproject.com/Articles/670141/Read-and-Write-Microsoft-Excel-with-Open-XML-SDK
https://www.microsoft.com/en-us/download/details.aspx?id=17985