//將DataTable導出到Excel,並為其中一列添加超鏈接,點擊鏈接打開本地圖片
public static bool Create(DataTable dt, string filePath, bool IsOverWrite = true, bool IsAppendTitle = true, string[] Headers = null, string fileName = "", string blobUrl = "", bool isLinux = false, string contaner = "", string fileUrl = "") { try { dt ??= new DataTable(); //創建Excel文件的對象 var book = new HSSFWorkbook(); //添加一個sheet var sheet1 = book.CreateSheet("Sheet1"); #region //書寫標題 if (IsAppendTitle) { if (Headers == null || Headers.Length == 0) { Headers = dt.GetColumnNames().ToArray(); } //給sheet1添加第一行的頭部標題 var row1 = sheet1.CreateRow(0); for (var i = 0; i < Headers.Length; i++) { row1.CreateCell(i).SetCellValue(Headers[i]); } } #endregion #region //填充數據 var k = IsAppendTitle ? 1 : 0; for (var i = 0; i < dt.Rows.Count; i++) { //創建數據行 var rowtemp = sheet1.CreateRow(k); rowtemp.CreateCell(0).SetCellValue((k).ToString()); k++; //填充數據 for (var j = 0; j < dt.Columns.Count; j++) { var value = dt.Rows[i][j].ToString(); var cell = rowtemp.CreateCell(j); var name = dt.Columns[j].ColumnName;
//需要添加超鏈接的列 if (name == "FILEPATH") {
//網絡圖片下載到本地 value = DownlodImg(value);
//添加超鏈接 var link = new HSSFHyperlink(HyperlinkType.File) { Address = value }; cell.Hyperlink = link; } cell.SetCellValue(value); } } #endregion var file = new FileInfo(DoPath.GetFullPath(filePath + fileName)); if (file.Exists && !IsOverWrite) { file.Delete(); } #region //寫入文件 using var ms = new MemoryStream(); book.Write(ms); ms.Seek(0, SeekOrigin.Begin); using var fileStream = new FileStream(file.FullName, FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite); var bytes = new byte[ms.Length]; ms.Read(bytes, 0, (int)ms.Length); fileStream.Write(bytes, 0, bytes.Length); fileStream.Close(); ms.Close(); #endregion file.Refresh(); return file.Exists; } catch (Exception ex) { Console.WriteLine(ex); return false; } }
//網絡圖片下載到本地
public static string DownlodImg(string imagePath) { var localPath = @"\ticket\image\"; var filePath = localPath;// AppDomain.CurrentDomain.BaseDirectory + @""; try { var name = imagePath.TrimStart('/').Replace("\\", "/"); var fileUrl = "圖片網絡地址"; var request = WebRequest.Create(fileUrl); var response = request.GetResponse(); var reader = response.GetResponseStream(); var file = new FileInfo(DoPath.GetFullPath(filePath)); if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } filePath += imagePath[(imagePath.LastIndexOf(@"/", StringComparison.Ordinal) + 1)..] + ".jpg"; var writer = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write); var buff = new byte[1024]; var c = 0; //實際讀取的字節數 while (reader != null && (c = reader.Read(buff, 0, buff.Length)) > 0) { writer.Write(buff, 0, c); } writer.Close(); writer.Dispose(); if (reader != null) { reader.Close(); reader.Dispose(); } response.Close(); } catch (Exception ex) { return ""; } return @"..\" + filePath; }
文件夾結構
點擊excel中的圖片鏈接會自動打開文件夾中的圖片