ASP.NET epplus 產生excel包含網路圖片跟下載excel 加強版-圖片指定位置、標題、框線、列高、至中
加強版code:
public void SETEXCEL()
{
string connectionString = ConfigurationManager.ConnectionStrings["connectionstring"].ToString();
Ede.Uof.Utility.Data.DatabaseHelper m_db = new Ede.Uof.Utility.Data.DatabaseHelper(connectionString);
string cmdTxt = @"
SELECT * FROM DBTABLES
";
DataTable dt = new DataTable();
dt.Load(m_db.ExecuteReader(cmdTxt));
if(dt.Rows.Count>0)
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 關閉新許可模式通知
// 沒設置的話會跳出 Please set the excelpackage.licensecontext property
//檔案名稱
var fileName = "ExampleExcel" + DateTime.Now.ToString("yyyy-MM-dd--hh-mm-ss") + ".xlsx";
var file = new FileInfo(fileName);
using (var excel = new ExcelPackage(file))
{
// 建立分頁
var ws = excel.Workbook.Worksheets.Add("list" + DateTime.Now.ToShortDateString());
//預設行高
ws.DefaultRowHeight = 60;
// 寫入資料試試
//ws.Cells[2, 1].Value = "測試測試";
int ROWS = 2;
int COLUMNS = 1;
//excel標題
ws.Cells[1, 1].Value = "標題1";
ws.Cells[1, 1].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center; //欄位置中
ws.Cells[1, 1].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center; //高度置中
ws.Cells[1, 1].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin); //儲存格框線
ws.Cells[1, 2].Value = "標題2";
ws.Cells[1, 2].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center; //欄位置中
ws.Cells[1, 2].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center; //高度置中
ws.Cells[1, 2].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin); //儲存格框線
foreach (DataRow od in dt.Rows)
{
ws.Cells[ROWS, 1].Value = od["標題1"].ToString();
ws.Cells[ROWS, 1].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center; //高度置中
ws.Cells[ROWS, 1].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin); //儲存格框線
ws.Cells[ROWS, 2].Value = od["標題2"].ToString();
ws.Cells[ROWS, 2].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center; //高度置中
ws.Cells[ROWS, 2].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin); //儲存格框線
if (!string.IsNullOrEmpty(od["PHOTO_DESC"].ToString()))
{
//網路圖片
WebClient MyWebClient = new WebClient();
StringBuilder PATH = new StringBuilder();
PATH.AppendFormat(@"https://****id={0}&name={1}
", od["ID"].ToString(), od["PHOTO"].ToString());
string fileURL = PATH.ToString();
var pageData = MyWebClient.DownloadData(fileURL);
Stream imgms = new MemoryStream(pageData);
System.Drawing.Bitmap imgfs = new System.Drawing.Bitmap(imgms);
ExcelPicture picture= excel.Workbook.Worksheets[0].Drawings.AddPicture(od["ID"].ToString(), imgfs);//插入圖片
picture.From.Row = ROWS;
picture.From.Column = COLUMNS;
picture.SetPosition(1* ROWS-1,5,12,5);//設置圖片的位置
picture.SetSize(50, 50);//設置圖片的大小
}
ROWS++;
}
////預設列寬、行高
//sheet.DefaultColWidth = 10; //預設列寬
//sheet.DefaultRowHeight = 30; //預設行高
//// 遇\n或(char)10自動斷行
//ws.Cells.Style.WrapText = true;
//自適應寬度設定
ws.Cells[ws.Dimension.Address].AutoFitColumns();
//自適應高度設定
ws.Row(1).CustomHeight = true;
//儲存Excel
//Byte[] bin = excel.GetAsByteArray();
//File.WriteAllBytes(@"C:\TEMP\" + fileName, bin);
//儲存和歸來的Excel檔案作為一個ByteArray
var data = excel.GetAsByteArray();
HttpResponse response = HttpContext.Current.Response;
Response.Clear();
//輸出標頭檔案
Response.AddHeader("content-disposition", "attachment; filename=" + fileName + "");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.BinaryWrite(data);
Response.Flush();
Response.End();
//package.Save();//這個方法是直接下載到本地
}
}
}
自我LV~