【推薦閱讀我的最新的Core版文章,是最全的介紹:C#_.NetCore_Web項目_EXCEL數據導出】
項目需要引用NPOI的Nuget包:
A-2--EXCEL數據導出--WebAPI項目--NPOI--接口導出:
說明:以下方法借助第三方插件:NPOI專門處理EXCEL等辦公文檔的類庫,因此項目中需引用該插件,NuGet--所有NPOI即可安裝。
/// <summary>
/// 班車數據導出成EXCEL
/// </summary>
/// <param name="conferenceID"></param>
/// <returns></returns>
[HttpGet]
public HttpResponseMessage ExportExcelDataForBusRoute(string conferenceID)
{
HttpResponseMessage result = new HttpResponseMessage();
ControllerHelp.RunAction(() =>
{
BusRouteModelCollection busColl = BusRouteModelAdapter.Instance.Load(m => m.AppendItem("ConferenceID", conferenceID));
//如果想要某個單元格內容顯示多列,在內容中加入: "\n" 換行字符
Dictionary<string, string> dicColl = new Dictionary<string, string>() {
{"路線標題","Title" },
{"發車時間","DepartDate" },
{"出發地","BeginPlace" },
{"對接人","ContactsName" },
{"對接人電話","ContactsPhone" }
};
result = ExcelHelp<BusRouteModel, BusRouteModelCollection>.ExportExcelData(dicColl, busColl, "BusRoute");
});
return result;
}
/// <summary>
/// 得到excel文件流
/// </summary>
/// <returns></returns>
private MemoryStream ExcelStream(Dictionary<string, string> displayAndColumnName, TCollection tlist)
{
//var list = dc.v_bs_dj_bbcdd1.Where(eps).ToList();
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet1 = workbook.CreateSheet("Sheet1");
//1-創建首行
IRow headRow = sheet1.CreateRow(0);
//1.1-設置首行樣式
IFont font = workbook.CreateFont();
font.Boldweight = (short)FontBoldWeight.Bold; //字體加粗
ICellStyle headCellStyle = workbook.CreateCellStyle();
headCellStyle.SetFont(font);
headCellStyle.Alignment = HorizontalAlignment.Center; //字體居中
List<string> displayNameList = displayAndColumnName.Keys.ToList();
//1.2-設置首行標題
for (var i = 0; i < displayAndColumnName.Keys.Count; i++)
{
ICell cell = headRow.CreateCell(i);
cell.SetCellValue(displayNameList[i].ToString());
cell.CellStyle = headCellStyle;
}
//2-設置內容列
List<string> columnNameList = displayAndColumnName.Values.ToList();
//2.1-內容行樣式
ICellStyle contentCellStyle = workbook.CreateCellStyle();
contentCellStyle.Alignment = HorizontalAlignment.Center; //字體居中
contentCellStyle.WrapText = true; //自動換行
for (var i = 0; i < tlist.Count; i++)
{
IRow row = sheet1.CreateRow(i + 1);
//設置內容
for (var j = 0; j < columnNameList.Count; j++)
{
ICell cell = row.CreateCell(j);
cell.SetCellValue(getPropertyValue(tlist[i], columnNameList[j]));
cell.CellStyle = contentCellStyle;
}
}
//3-自動列寬-根據內容長度自動展開
for (int i = 0; i < displayNameList.Count; i++)
{
sheet1.AutoSizeColumn(i);
}
MemoryStream file = new MemoryStream();
workbook.Write(file);
//這句代碼非常重要,如果不加,會報:打開的EXCEL格式與擴展名指定的格式不一致
file.Seek(0, SeekOrigin.Begin);
return file;
}
/// <summary>
/// 導出excel功能控制器
/// </summary>
/// <returns></returns>
public HttpResponseMessage ExportExcelDataForWebAPI(Dictionary<string, string> displayAndColumnName, TCollection tlist,string exportFileName)
{
var file = ExcelStream(displayAndColumnName, tlist);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(file);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = exportFileName+".xls";
return result;
}
