zoukankan      html  css  js  c++  java
  • Csharp: read excel file using Open XML SDK 2.5

    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

  • 相关阅读:
    PAT 1088 三人行
    memset和memcpy
    算法训练 结点选择
    算法训练 K好数
    算法训练 最大最小公倍数
    算法训练 区间k大数查询
    算法训练 Eurodiffusion
    Kubernetes Device Plugins
    Kubeadm and Kops
    Go语言包管理工具Glide
  • 原文地址:https://www.cnblogs.com/geovindu/p/4742501.html
Copyright © 2011-2022 走看看