zoukankan      html  css  js  c++  java
  • open xml sdk 将dataTable写入Excel 并下载 FileStrem

     1 /// <summary>    
     2         /// 将集合类转换成DataTable    
     3         /// </summary>    
     4         /// <param name="list">集合</param>    
     5         /// <returns></returns>    
     6         public static DataTable ToDataTableTow(List<ElectronicReceiptModel> list)
     7         {
     8             DataTable result = new DataTable();
     9             if (list.Count > 0)
    10             {
    11                 PropertyInfo[] propertys = list[0].GetType().GetProperties();
    12 
    13                 foreach (PropertyInfo pi in propertys)
    14                 {
    15                     result.Columns.Add(pi.Name, pi.PropertyType);
    16                 }
    17                 for (int i = 0; i < list.Count; i++)
    18                 {
    19                     ArrayList tempList = new ArrayList();
    20                     foreach (PropertyInfo pi in propertys)
    21                     {
    22                         object obj = pi.GetValue(list[i], null);
    23                         tempList.Add(obj);
    24                     }
    25                     object[] array = tempList.ToArray();
    26                     result.LoadDataRow(array, true);
    27                 }
    28             }
    29             return result;
    30         }
    /// <summary>  
            /// 创建excel,并且把dataTable导入到excel中  
            /// </summary>         
            /// <param name="destination">保存路径</param>  
            /// <param name="table">数据源</param>   
     public static MemoryStream CreateExcel(DataTable table)
            {
                MemoryStream stream = new MemoryStream();
                using (var workbook = SpreadsheetDocument.Create(stream, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook))
                {
                    var workbookPart = workbook.AddWorkbookPart();
                    workbook.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();
                    workbook.WorkbookPart.Workbook.Sheets = new DocumentFormat.OpenXml.Spreadsheet.Sheets();
    
                    uint sheetId = 1;
                    bool isAddStyle = false;
                    //foreach (DataTable table in dataTables)
                    //{
                    var sheetPart = workbook.WorkbookPart.AddNewPart<WorksheetPart>();
                    var sheetData = new SheetData();
                    sheetPart.Worksheet = new Worksheet();
                    if (!isAddStyle)
                    {
                        var stylesPart = workbook.WorkbookPart.AddNewPart<WorkbookStylesPart>();
                        Stylesheet styles = new CustomStylesheet();
                        styles.Save(stylesPart);
                        isAddStyle = true;
                    }
                    //Columns headColumns = CrateColunms(table);
                    //sheetPart.Worksheet.Append(headColumns);
                    DocumentFormat.OpenXml.Spreadsheet.Sheets sheets =
                        workbook.WorkbookPart.Workbook.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>();
                    string relationshipId = workbook.WorkbookPart.GetIdOfPart(sheetPart);
    
                    if (sheets.Elements<DocumentFormat.OpenXml.Spreadsheet.Sheet>().Count() > 0)
                    {
                        sheetId =
                            sheets.Elements<DocumentFormat.OpenXml.Spreadsheet.Sheet>().Select(s => s.SheetId.Value).Max() +
                            1;
                    }
                    string sheetName = "电子单";
    
    
                    DocumentFormat.OpenXml.Spreadsheet.Sheet sheet = new DocumentFormat.OpenXml.Spreadsheet.Sheet()
                    {
                        Id = relationshipId,
                        SheetId = sheetId,
                        Name = sheetName
                    };
                    sheets.Append(sheet);//创建表
    
                    DocumentFormat.OpenXml.Spreadsheet.Row headerRow = new DocumentFormat.OpenXml.Spreadsheet.Row();
    
                    List<String> columns = new List<string>();
                    foreach (DataColumn column in table.Columns)
                    {
                        columns.Add(column.ColumnName);
    
                        DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();
                        cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
                        cell.StyleIndex = 11;
                        cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(column.ColumnName);
                        headerRow.AppendChild(cell);
                    }
                    sheetData.AppendChild(headerRow);//创建表头
    
                    foreach (DataRow dsrow in table.Rows)
                    {
                        DocumentFormat.OpenXml.Spreadsheet.Row newRow = new DocumentFormat.OpenXml.Spreadsheet.Row();
                        foreach (String col in columns)
                        {
                            DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();
                            cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
                            cell.StyleIndex = 10;
                            cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString()); //  
                            newRow.AppendChild(cell);
                        }
                        sheetData.AppendChild(newRow);
                    }
                    sheetPart.Worksheet.Append(sheetData);//创建单元格
    
                    workbook.Close();
                }
                stream.Position = 0;
                return stream;
            }

    //字符流的形式下载Excel
    1
    DataTable table = ElectronicReceiptView.ToDataTableTow(proList); 2 var stream= ElectronicReceiptView.CreateExcel(table); 3 return File(stream, "application/ms-excel", name);
  • 相关阅读:
    HTTP处理程序介绍
    c# Enum获取name,value和description
    如何成为优秀的软件人才
    关于系统设计分层
    从DLL中加载启动窗体
    摩斯密码
    休息下
    关于博文转载
    整合TextBox与Label 创建新控件EFLabelText
    ProC连接Oracle
  • 原文地址:https://www.cnblogs.com/longshanshan/p/7943065.html
Copyright © 2011-2022 走看看