From 4eb08b61f923c92ca16fe2d900a373602b1f5f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=AF=E5=8B=87?= <1678167865@qq.com> Date: Mon, 13 Sep 2021 10:05:19 +0800 Subject: [PATCH] =?UTF-8?q?Signed-off-by:=20=E6=9F=AF=E5=8B=87=20<16781678?= =?UTF-8?q?65@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 11 +- ...4\345\272\246\346\225\260\346\215\256.xml" | 2 +- .../Excel.Export.Data.csproj | 17 +++ .../Excel.Export.Data/XmlData.cs | 14 +-- .../ExcelExport.Base/ExcelExport.Base.csproj | 7 ++ ExcelExport/ExcelExport.Base/IData.cs | 13 +++ ExcelExport/ExcelExport.Base/IExport.cs | 12 ++ ExcelExport/ExcelExport.Base/ModelBase.cs | 6 + .../ExcelExport.Export/EPPlusExport.cs | 110 ++++++++++++++++++ .../ExcelExport.Export.csproj | 16 +++ .../ExcelExport.Export/NPOIExport.cs | 42 +++---- .../ExcelExport.UI}/App.xaml | 4 +- .../ExcelExport.UI}/App.xaml.cs | 2 +- .../ExcelExport.UI}/AssemblyInfo.cs | 0 .../ExcelExport.UI/ExcelExport.UI.csproj | 18 +++ .../ExcelExport.UI/ExcelExport.UI.csproj.user | 0 ExcelExport/ExcelExport.UI/MainWindow.xaml | 21 ++++ ExcelExport/ExcelExport.UI/MainWindow.xaml.cs | 77 ++++++++++++ ExcelExport/ExcelExport.sln | 43 +++++++ .../NPOI_Project/DesignTimeBuild/.dtbcache.v2 | Bin 81692 -> 0 bytes NPOI_Project/.vs/NPOI_Project/v16/.suo | Bin 69120 -> 0 bytes NPOI_Project/MainWindow.xaml | 13 --- NPOI_Project/MainWindow.xaml.cs | 44 ------- NPOI_Project/NPOI_Project.csproj | 24 ---- NPOI_Project/NPOI_Project.sln | 25 ---- README.md | 2 + 26 files changed, 382 insertions(+), 141 deletions(-) rename "NPOI_Project/Data/\345\233\275\351\231\205\346\225\260\346\215\256\344\270\273\350\246\201\345\233\275\345\256\266(\345\234\260\345\214\272)\345\271\264\345\272\246\346\225\260\346\215\256.xml" => "ExcelExport/Excel.Export.Data/DataFiles/\345\233\275\351\231\205\346\225\260\346\215\256\344\270\273\350\246\201\345\233\275\345\256\266(\345\234\260\345\214\272)\345\271\264\345\272\246\346\225\260\346\215\256.xml" (99%) create mode 100644 ExcelExport/Excel.Export.Data/Excel.Export.Data.csproj rename NPOI_Project/Helper/XmlHelper.cs => ExcelExport/Excel.Export.Data/XmlData.cs (87%) create mode 100644 ExcelExport/ExcelExport.Base/ExcelExport.Base.csproj create mode 100644 ExcelExport/ExcelExport.Base/IData.cs create mode 100644 ExcelExport/ExcelExport.Base/IExport.cs create mode 100644 ExcelExport/ExcelExport.Base/ModelBase.cs create mode 100644 ExcelExport/ExcelExport.Export/EPPlusExport.cs create mode 100644 ExcelExport/ExcelExport.Export/ExcelExport.Export.csproj rename NPOI_Project/NpoiHelper/ExcelHelper.cs => ExcelExport/ExcelExport.Export/NPOIExport.cs (92%) rename {NPOI_Project => ExcelExport/ExcelExport.UI}/App.xaml (78%) rename {NPOI_Project => ExcelExport/ExcelExport.UI}/App.xaml.cs (92%) rename {NPOI_Project => ExcelExport/ExcelExport.UI}/AssemblyInfo.cs (100%) create mode 100644 ExcelExport/ExcelExport.UI/ExcelExport.UI.csproj rename NPOI_Project/NPOI_Project.csproj.user => ExcelExport/ExcelExport.UI/ExcelExport.UI.csproj.user (100%) create mode 100644 ExcelExport/ExcelExport.UI/MainWindow.xaml create mode 100644 ExcelExport/ExcelExport.UI/MainWindow.xaml.cs create mode 100644 ExcelExport/ExcelExport.sln delete mode 100644 NPOI_Project/.vs/NPOI_Project/DesignTimeBuild/.dtbcache.v2 delete mode 100644 NPOI_Project/.vs/NPOI_Project/v16/.suo delete mode 100644 NPOI_Project/MainWindow.xaml delete mode 100644 NPOI_Project/MainWindow.xaml.cs delete mode 100644 NPOI_Project/NPOI_Project.csproj delete mode 100644 NPOI_Project/NPOI_Project.sln create mode 100644 README.md diff --git a/.gitignore b/.gitignore index 07cf336..d3665c2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,12 @@ # 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。 ################################################################################ -/NPOI_Project/bin/Debug/netcoreapp3.1 -/NPOI_Project/obj +/ExcelExport/.vs/ExcelExport +/ExcelExport/Excel.Export.Data/bin/Debug/netcoreapp3.1 +/ExcelExport/Excel.Export.Data/obj +/ExcelExport/ExcelExport.Base/obj +/ExcelExport/ExcelExport.Base/bin/Debug/netcoreapp3.1 +/ExcelExport/ExcelExport.Export/bin/Debug/netcoreapp3.1 +/ExcelExport/ExcelExport.Export/obj +/ExcelExport/ExcelExport.UI/bin/Debug/netcoreapp3.1 +/ExcelExport/ExcelExport.UI/obj diff --git "a/NPOI_Project/Data/\345\233\275\351\231\205\346\225\260\346\215\256\344\270\273\350\246\201\345\233\275\345\256\266(\345\234\260\345\214\272)\345\271\264\345\272\246\346\225\260\346\215\256.xml" "b/ExcelExport/Excel.Export.Data/DataFiles/\345\233\275\351\231\205\346\225\260\346\215\256\344\270\273\350\246\201\345\233\275\345\256\266(\345\234\260\345\214\272)\345\271\264\345\272\246\346\225\260\346\215\256.xml" similarity index 99% rename from "NPOI_Project/Data/\345\233\275\351\231\205\346\225\260\346\215\256\344\270\273\350\246\201\345\233\275\345\256\266(\345\234\260\345\214\272)\345\271\264\345\272\246\346\225\260\346\215\256.xml" rename to "ExcelExport/Excel.Export.Data/DataFiles/\345\233\275\351\231\205\346\225\260\346\215\256\344\270\273\350\246\201\345\233\275\345\256\266(\345\234\260\345\214\272)\345\271\264\345\272\246\346\225\260\346\215\256.xml" index 643f260..b306115 100644 --- "a/NPOI_Project/Data/\345\233\275\351\231\205\346\225\260\346\215\256\344\270\273\350\246\201\345\233\275\345\256\266(\345\234\260\345\214\272)\345\271\264\345\272\246\346\225\260\346\215\256.xml" +++ "b/ExcelExport/Excel.Export.Data/DataFiles/\345\233\275\351\231\205\346\225\260\346\215\256\344\270\273\350\246\201\345\233\275\345\256\266(\345\234\260\345\214\272)\345\271\264\345\272\246\346\225\260\346\215\256.xml" @@ -1,6 +1,6 @@ - 数据库:国际数据主要国家(地区)年度数据 + 国际数据主要国家(地区)年度数据 年中人口(人) diff --git a/ExcelExport/Excel.Export.Data/Excel.Export.Data.csproj b/ExcelExport/Excel.Export.Data/Excel.Export.Data.csproj new file mode 100644 index 0000000..ea64f05 --- /dev/null +++ b/ExcelExport/Excel.Export.Data/Excel.Export.Data.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp3.1 + + + + + + + + + PreserveNewest + + + + diff --git a/NPOI_Project/Helper/XmlHelper.cs b/ExcelExport/Excel.Export.Data/XmlData.cs similarity index 87% rename from NPOI_Project/Helper/XmlHelper.cs rename to ExcelExport/Excel.Export.Data/XmlData.cs index 135a6eb..4863a22 100644 --- a/NPOI_Project/Helper/XmlHelper.cs +++ b/ExcelExport/Excel.Export.Data/XmlData.cs @@ -1,17 +1,15 @@ -using System; +using ExcelExport.Base; +using System; using System.Data; using System.IO; using System.Xml; -namespace NPOI_Project.Helper +namespace Excel.Export.Data { - public class XmlHelper + public class XmlData : IData { - private static readonly string XmlRoot = AppDomain.CurrentDomain.BaseDirectory + "/Data/"; - - - - public static DataTable WriteToTable(string fileName) + private static readonly string XmlRoot = AppDomain.CurrentDomain.BaseDirectory + "DataFiles/"; + public DataTable GetTableData(string fileName) { fileName = XmlRoot + fileName; if (!File.Exists(fileName)) diff --git a/ExcelExport/ExcelExport.Base/ExcelExport.Base.csproj b/ExcelExport/ExcelExport.Base/ExcelExport.Base.csproj new file mode 100644 index 0000000..cb63190 --- /dev/null +++ b/ExcelExport/ExcelExport.Base/ExcelExport.Base.csproj @@ -0,0 +1,7 @@ + + + + netcoreapp3.1 + + + diff --git a/ExcelExport/ExcelExport.Base/IData.cs b/ExcelExport/ExcelExport.Base/IData.cs new file mode 100644 index 0000000..216eec0 --- /dev/null +++ b/ExcelExport/ExcelExport.Base/IData.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Text; + +namespace ExcelExport.Base +{ + public interface IData + { + public DataTable GetTableData(string path); + + } +} diff --git a/ExcelExport/ExcelExport.Base/IExport.cs b/ExcelExport/ExcelExport.Base/IExport.cs new file mode 100644 index 0000000..5da2ce5 --- /dev/null +++ b/ExcelExport/ExcelExport.Base/IExport.cs @@ -0,0 +1,12 @@ +using System; +using System.Data; + +namespace ExcelExport.Base +{ + public interface IExport + { + public bool Export(DataTable dt, string filenPath); + + public bool Export(DataSet ds, string filePath); + } +} diff --git a/ExcelExport/ExcelExport.Base/ModelBase.cs b/ExcelExport/ExcelExport.Base/ModelBase.cs new file mode 100644 index 0000000..ea2c504 --- /dev/null +++ b/ExcelExport/ExcelExport.Base/ModelBase.cs @@ -0,0 +1,6 @@ +namespace ExcelExport.Base +{ + public class ModelBase + { + } +} diff --git a/ExcelExport/ExcelExport.Export/EPPlusExport.cs b/ExcelExport/ExcelExport.Export/EPPlusExport.cs new file mode 100644 index 0000000..e4e316e --- /dev/null +++ b/ExcelExport/ExcelExport.Export/EPPlusExport.cs @@ -0,0 +1,110 @@ +using ExcelExport.Base; +using OfficeOpenXml; +using OfficeOpenXml.Drawing.Chart; +using OfficeOpenXml.Style; +using System; +using System.Data; +using System.Drawing; +using System.IO; + +namespace ExcelExport.Export +{ + public class EPPlusExport : IExport + { + static EPPlusExport() + { + //EPPlus 5.0 以后的版本需要指定 商业证书 或者非商业证书。你需要在代码里指定证书或者降低EPPlus版本 + ExcelPackage.LicenseContext = LicenseContext.NonCommercial; + } + public bool Export(DataTable dt, string filenPath) + { + DataSet ds = new DataSet(); + ds.Tables.Add(dt.Copy()); + return Export(ds, filenPath); + } + + public bool Export(DataSet ds, string filePath) + { + using ExcelPackage package = new ExcelPackage(); + foreach (DataTable item in ds.Tables) + { + if (!Export(item, package)) + { + return false; + } + } + byte[] bytes = package.GetAsByteArray(); + FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + fs.Write(bytes, 0, bytes.Length); + fs.Flush(); + fs.Close(); + return true; + } + + private bool Export(DataTable dt, ExcelPackage package) + { + if (package is null) + return false; + ExcelWorksheet sheet = package.Workbook.Worksheets.Add(dt.TableName); + + //设置标题样式 + var caption = sheet.Cells[1, 1]; + caption.Value = dt.TableName; + caption.Style.VerticalAlignment = ExcelVerticalAlignment.Center; + caption.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; + caption.Style.Font.Size = 16; + caption.Style.Font.Bold = true; + sheet.Cells[1, 1, 1, dt.Columns.Count].Merge = true;//合并单元格 + sheet.Cells[1, 1, 1, dt.Columns.Count].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); + + //设置列头 + sheet.Row(2).Height = 30; + for (int i = 0; i < dt.Columns.Count; i++) + { + var head = sheet.Cells[2, i + 1]; + head.Value = dt.Columns[i]; + head.Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); + head.Style.Fill.PatternType = ExcelFillStyle.Solid; + head.Style.Fill.BackgroundColor.SetColor(Color.Gold); + head.Style.VerticalAlignment = ExcelVerticalAlignment.Center; + head.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; + sheet.Column(i + 1).Width = 20;//设置列宽 + } + + //填充数据 + for (int i = 0; i < dt.Rows.Count; i++) + { + sheet.Row(i + 3).Height = 30;//设置行高 + for (int j = 0; j < dt.Columns.Count; j++) + { + var cell = sheet.Cells[i + 3, j + 1]; + if (j == 3) + cell.Value = Convert.ToDouble(dt.Rows[i][j]); + else + cell.Value = dt.Rows[i][j]; + cell.Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); + cell.Style.VerticalAlignment = ExcelVerticalAlignment.Center; + cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; + } + } + + ExcelChart chart = sheet.Drawings.AddChart("chart", eChartType.BarStacked); + ExcelChartSerie serie = chart.Series.Add(sheet.Cells[3, 4, 9, 4], sheet.Cells[3, 2, 9, 3]); + serie.Header = "2017年"; + chart.SetPosition(100, 600);//设置位置 + chart.SetSize(800, 400);//设置大小 + chart.Title.Text = "国际数据主要国家年度数据";//设置图表的标题 + //chart.Title.Font.Color = Color.FromArgb(89, 89, 89);//设置标题的颜色 + chart.Title.Font.Size = 15;//标题的大小 + chart.Title.Font.Bold = true;//标题的粗体 + chart.Style = eChartStyle.Style15;//设置图表的样式 + chart.Legend.Border.LineStyle = OfficeOpenXml.Drawing.eLineStyle.Solid; + chart.Legend.Border.Fill.Color = Color.FromArgb(217, 217, 217);//设置图例的样式 + package.Save(); + //sheet.Cells.Style.ShrinkToFit = true;//单元格自动适应大小 + //sheet.Row(1).CustomHeight = true;//自动调整行高 + //sheet.Column(1).Width = 30;//设置列宽 + return true; + } + } +} diff --git a/ExcelExport/ExcelExport.Export/ExcelExport.Export.csproj b/ExcelExport/ExcelExport.Export/ExcelExport.Export.csproj new file mode 100644 index 0000000..9ef3a07 --- /dev/null +++ b/ExcelExport/ExcelExport.Export/ExcelExport.Export.csproj @@ -0,0 +1,16 @@ + + + + netcoreapp3.1 + + + + + + + + + + + + diff --git a/NPOI_Project/NpoiHelper/ExcelHelper.cs b/ExcelExport/ExcelExport.Export/NPOIExport.cs similarity index 92% rename from NPOI_Project/NpoiHelper/ExcelHelper.cs rename to ExcelExport/ExcelExport.Export/NPOIExport.cs index 6164921..d5d46f6 100644 --- a/NPOI_Project/NpoiHelper/ExcelHelper.cs +++ b/ExcelExport/ExcelExport.Export/NPOIExport.cs @@ -1,13 +1,30 @@ -using NPOI.HSSF.UserModel; +using ExcelExport.Base; +using NPOI.HSSF.UserModel; using NPOI.HSSF.Util; using NPOI.SS.UserModel; using System.Data; using System.IO; -namespace NPOI_Project.NpoiHelper +namespace ExcelExport.Export { - public class ExcelHelper + public class NPOIExport : IExport { + public bool Export(DataTable dt, string filePath) + { + HSSFWorkbook sheets = Export(dt); + return ExportToFile(sheets, filePath); + } + + public bool Export(DataSet ds, string filePath) + { + HSSFWorkbook sheets = new HSSFWorkbook(); + foreach (DataTable item in ds.Tables) + { + Export(item, sheets); + } + return ExportToFile(sheets, filePath); + } + private static HSSFWorkbook Export(DataTable dt, HSSFWorkbook sheets = null) { if (sheets is null) @@ -21,7 +38,7 @@ namespace NPOI_Project.NpoiHelper caption.CellStyle.FillForegroundColor = HSSFColor.White.Index; caption.SetCellValue(dt.TableName); //合并单元格 - sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dt.Columns.Count-1)); + sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dt.Columns.Count - 1)); //添加列数据 var headler = sheet.CreateRow(1); ICellStyle cellStyle = GetStyle(sheets); @@ -46,22 +63,6 @@ namespace NPOI_Project.NpoiHelper return sheets; } - public static bool Export(DataTable dt, string filePath) - { - HSSFWorkbook sheets = Export(dt); - return ExportToFile(sheets, filePath); - } - - public static bool Export(DataSet ds, string filepath) - { - HSSFWorkbook sheets = new HSSFWorkbook(); - foreach (DataTable item in ds.Tables) - { - Export(item, sheets); - } - return ExportToFile(sheets, filepath); - } - private static bool ExportToFile(HSSFWorkbook sheets, string filepath) { try @@ -79,7 +80,6 @@ namespace NPOI_Project.NpoiHelper { return false; } - } private static ICellStyle GetStyle(HSSFWorkbook sheets, bool isHaed = false) diff --git a/NPOI_Project/App.xaml b/ExcelExport/ExcelExport.UI/App.xaml similarity index 78% rename from NPOI_Project/App.xaml rename to ExcelExport/ExcelExport.UI/App.xaml index 3663086..8a06e94 100644 --- a/NPOI_Project/App.xaml +++ b/ExcelExport/ExcelExport.UI/App.xaml @@ -1,7 +1,7 @@ - diff --git a/NPOI_Project/App.xaml.cs b/ExcelExport/ExcelExport.UI/App.xaml.cs similarity index 92% rename from NPOI_Project/App.xaml.cs rename to ExcelExport/ExcelExport.UI/App.xaml.cs index 05a439f..80a42af 100644 --- a/NPOI_Project/App.xaml.cs +++ b/ExcelExport/ExcelExport.UI/App.xaml.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Threading.Tasks; using System.Windows; -namespace NPOI_Project +namespace ExcelExport.UI { /// /// Interaction logic for App.xaml diff --git a/NPOI_Project/AssemblyInfo.cs b/ExcelExport/ExcelExport.UI/AssemblyInfo.cs similarity index 100% rename from NPOI_Project/AssemblyInfo.cs rename to ExcelExport/ExcelExport.UI/AssemblyInfo.cs diff --git a/ExcelExport/ExcelExport.UI/ExcelExport.UI.csproj b/ExcelExport/ExcelExport.UI/ExcelExport.UI.csproj new file mode 100644 index 0000000..3793e4b --- /dev/null +++ b/ExcelExport/ExcelExport.UI/ExcelExport.UI.csproj @@ -0,0 +1,18 @@ + + + + WinExe + netcoreapp3.1 + true + + + + + + + + + + + + diff --git a/NPOI_Project/NPOI_Project.csproj.user b/ExcelExport/ExcelExport.UI/ExcelExport.UI.csproj.user similarity index 100% rename from NPOI_Project/NPOI_Project.csproj.user rename to ExcelExport/ExcelExport.UI/ExcelExport.UI.csproj.user diff --git a/ExcelExport/ExcelExport.UI/MainWindow.xaml b/ExcelExport/ExcelExport.UI/MainWindow.xaml new file mode 100644 index 0000000..494b96a --- /dev/null +++ b/ExcelExport/ExcelExport.UI/MainWindow.xaml @@ -0,0 +1,21 @@ + + + + + + + + +