A、Excelエクスポートヘルパー
/ * 参考NuGetパッケージEPPlus * / /// <要約> /// エクセルエクスポートヘルプクラス /// </要約> パブリック クラスExcelExportHelper { パブリック 静的の 文字列 ExcelContentType => " アプリケーション/ vnd.openxmlformats-officedocument.spreadsheetml.sheet " 。 /// <要約> /// 一覧转のDataTable /// </要約> /// <typeparam名= "T"> </ typeparam> /// <PARAM NAME = "データ"> </ param>の / // <リターン> </リターン> パブリック 静的 DataTableのListToDataTable <T>(リスト<T> データ) { PropertyDescriptorCollectionプロパティ = TypeDescriptor.GetProperties(typeof演算(T))。 DataTableのdataTable = 新しいDataTableを(); 以下のために(int型私は= 0 ; I <properties.Countを; I ++ ) { PropertyDescriptorプロパティ = プロパティ[I]。 dataTable.Columns.Add(property.Name、Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType)。 } オブジェクト []の値= 新しい オブジェクト[properties.Count]。 foreachの(Tの項目でデータ) { 以下のために(int型私は= 0 ; I <values.Lengthを; I ++ ) { 値[I] = プロパティ[I]以降.getvalue(アイテム) } dataTable.Rows.Add(値)。 } 返すのdataTableを。 } /// <要約> /// エクスポートエクセル /// </要約> /// ます。<param name = "のdataTable"> データソース</ param>の /// <PARAM NAME = "見出し"> ワークブックワークシート< / param>の /// <PARAM NAME = "showSrNo"> 行番号を表示するかどうか// </ param>の /// <PARAM NAME = "columnsToTakeを"> コラム輸出へ</ param>の /// <リターンA> < /戻り値> パブリック 静的の バイト [] ExportExcel(のdataTableのDataTable、文字列の見出し= "" 、BOOL showSrNo = falseが、paramsは 、文字列を[] columnsToTake) { バイト[]結果。 使用して(ExcelPackageパッケージ= 新しいExcelPackage()) { ワークシートExcelWorksheet = package.Workbook.Worksheets.Add($ " {}データの見出し" ); INT startRowFrom = ストリング .IsNullOrEmpty(見出し)?1:3 ; // で始まる行 // 行番号を表示するかどうかを IF (showSrNo) { DataColumnのDataColumn = dataTable.Columns.Add(" #"、typeof演算(int型)); dataColumn.SetOrdinal(0 )。 int型のインデックス= 1 ; foreachの(のDataRowの項目でdataTable.Rows) { 項目[ 0 ] = インデックス。 インデックス ++ ; } } // Excelファイルにコンテンツを追加 workSheet.Cells [ " A " + startRowFrom] .LoadFromDataTable(のdataTable、真の); // 小さいコンテンツを有する細胞の自動調整幅 INT = columnIndexに1 。 foreachの(のDataColumn項目でdataTable.Columns) { ExcelRange columnCells = workSheet.Cells [workSheet.Dimension.Start.Row、columnIndexに、workSheet.Dimension.End.Row、columnIndexに]。 INTのmaxLength = columnCells.Max(セル=> cell.Value.ToString())(COUNT); もし(maxLengthの< 150 ) { workSheet.Column(columnIndexに).AutoFit(); } columnIndexに ++ ; } // フォーマットヘッダ-ブラックにイエロー、大胆な 使用(ExcelRange R = workSheet.Cells [startRowFrom、1 、startRowFrom、dataTable.Columns.Count]) { r.Style.Font.Color.SetColor(System.Drawing.Color.White)。 r.Style.Font.Boldは = 真; r.Style.Fill.PatternType = ExcelFillStyle.Solid。 r.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml(" #の1fb5ad " )); } // フォーマット細胞-追加境界 使用(ExcelRange R = workSheet.Cells [startRowFrom + 1、1、startRowFrom + dataTable.Rows.Count、dataTable.Columns.Count]) { r.Style.Border.Top.Style = ExcelBorderStyle.Thin。 r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin。 r.Style.Border.Left.Style = ExcelBorderStyle.Thin。 r.Style.Border.Right.Style = ExcelBorderStyle.Thin。 r.Style.Border.Top.Color.SetColor(System.Drawing.Color.Black)。 r.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Black)。 r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black)。 r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black)。 } // 列を無視して除去 するために(INT I = dataTable.Columns.Count - 1 ; I> = 0 ; i-- ) { もし(I == 0 && showSrNo) { 続け; } もし(!columnsToTake.Contains(dataTable.Columns [i]の.ColumnName)) { workSheet.DeleteColumn(I + 1 )。 } } もし(!文字列.IsNullOrEmpty(見出し)) { workSheet.Cells [ " A1 " ] .Valueの= 見出し。 workSheet.Cells [ " A1 " ] .Style.Font.Size = 20 。 workSheet.InsertColumn(1、1 )。 workSheet.InsertRow(1、1 )。 workSheet.Column(1).Width = 5 。 } 結果 = package.GetAsByteArray()。 } 戻り値の結果; } /// <要約> /// 导出エクセル /// </要約> /// <typeparam名= "T"> </ typeparam> /// <PARAM NAME = "データ"> </ param>の // / <PARAM NAME = "見出し"> </ param>の /// <PARAM NAME = "isShowSlNo"> </ param>の /// <PARAM NAME = "columnsToTake"> </ param>の /// <リターン> < /リターン> パブリック 静的の バイト [] ExportExcel <T>(リスト<T>データ、列見出し= "" 、ブール isShowSlNo = falseを、paramsは 、文字列を[] columnsToTake) { リターンExportExcel(ListToDataTable(データ)は、見出し、isShowSlNo、columnsToTake)。 } }
第二に、コール
実行した後、ExcelがDドライブに保存されます
文字列 STRSQL = 文字列(.Format "@ 名、[のPhoneNumber]電話AS、[ユーザー]の[メール]メールボックスとして、[部門] AS部門AS SELECT TOP 10 [名前] " ); DTのDataTable = DBHelper.ExecuteTable(STRSQL); 文字列 []列= { " 名前"、" 電話"、" メール"、" 部門" }; バイト [] =含むFileContent ExcelExportHelper.ExportExcel(DT、"" 、falseに、列); FileStream fsの = 新しい FileStreamを(@ " D:\信息の.xlsx " 、FileMode.Create、FileAccess.Write)。 fs.Write(含むFileContent、0 、filecontent.Length)。 fs.Flush(); fs.Close();