iT邦幫忙

1

Excel 輸出的內容發生問題~關於使用NPOI設定文字顏色失敗的問題(已更新解決)

  • 分享至 

  • xImage

我正照著這篇文章來操做NPOI
https://dotblogs.azurewebsites.net/Leon-Yang/2021/01/19/124243

但是在這段文字顏色設定出現檔案錯誤~
搞不懂為何Excel開啟會有錯~
請有遇到過的高手,幫忙了解一下~

//設定負數為紅色
if (Str.IndexOf("-") > -1)
{
    //字體顏色
    IFont font = (XSSFFont)xssfworkbook.CreateFont();
    font.Color = IndexedColors.Red.Index;
    NoColor.SetFont(font);

}

https://ithelp.ithome.com.tw/upload/images/20240809/20061369b2NWIXvEkE.png

Excel檔案開啟時發生的問題
https://ithelp.ithome.com.tw/upload/images/20240809/20061369WZBtkUlEvR.png

數字若有設定負數的數字建不見了(設定負數為紅色)
https://ithelp.ithome.com.tw/upload/images/20240809/20061369FApwZjupwi.png

哀~只好降級HSSFWorkbook版本才可以正常~
無法使用XSSFWorkbook版本

本來可以用自定義顏色~看起來沒辦法了~放棄

//建立背景顏色物件
StyleColor.FillForegroundColor = 0;
StyleColor.FillPattern = FillPattern.SolidForeground;

//自定義背景顏色
var hex = MainColor.TrimStart('#'); //過濾網頁色碼符號 #
var Color_R = Convert.ToByte(hex.Substring(0, 2), 16);
var Color_G = Convert.ToByte(hex.Substring(2, 2), 16);
var Color_B = Convert.ToByte(hex.Substring(4, 2), 16);
((XSSFColor)StyleColor.FillForegroundColorColor).SetRgb(new byte[] { Color_R, Color_G, Color_B });

結果降為 HSSFWorkbook舊版本 發現有設定背景色會覆蓋文字的Bug

後來找到XSSFWorkbook版本,可以用儲存格格式來設定文字顏色來解決

終於可以好好放假玩了:D

參考片段

var NoColor = xssfworkbook.CreateCellStyle(); //建立樣式物件
NoColor.Alignment = HorizontalAlignment.Center; //水平置中
NoColor.VerticalAlignment = VerticalAlignment.Center; //垂直置中
NoColor.BorderTop = BorderStyle.Thin; //設定上框線
NoColor.BorderBottom = BorderStyle.Thin; //設定下框線
NoColor.BorderLeft = BorderStyle.Thin; //設定左框線
NoColor.BorderRight = BorderStyle.Thin; //設定右框線

//建立儲存格資料與樣式
int setValue;
if (int.TryParse(Str, out setValue))
{
    //將文字格式轉為數字格式
    sheet.GetRow(DataRowIndex).CreateCell(i).SetCellValue(Convert.ToDouble(Str));
}
else
{
    //只記錄純文字格式
    sheet.GetRow(DataRowIndex).CreateCell(i).SetCellValue(Str);
}

sheet.GetRow(DataRowIndex).GetCell(i).CellStyle = NoColor; //套用樣式
//設定負數為紅色
sheet.GetRow(DataRowIndex).GetCell(i).CellStyle.DataFormat = xssfworkbook.CreateDataFormat().GetFormat("#,##0;[red]-#,##0"); 

想要的結果~呼....

https://ithelp.ithome.com.tw/upload/images/20240810/20061369LzrLnlmO4a.png

更新~增加百分比的資料若有負數的話
儲存格格式

//建立儲存格
RowObj.CreateCell(i);

//紀錄目前儲存格
var Cells = RowObj.GetCell(i);

//建立儲存格資料與樣式
int setValue;
if (int.TryParse(Str, out setValue))
{
    //將文字格式轉為數字格式
    Cells.SetCellValue(Convert.ToDouble(Str));
}
else
{
    if (Str.IndexOf("%") > -1)
    {
        //將文字格式轉為數字格式
        Cells.SetCellValue(Convert.ToDouble(Str.Replace("%","")) / 100);
    }
    else
    {
        //只記錄純文字格式
        Cells.SetCellValue(Str);
    }

}

Cells.CellStyle = StyleColor; //套用樣式

//設定百分比的負數為紅色
Cells.CellStyle.DataFormat = xssfworkbook.CreateDataFormat().GetFormat("0.0%;[red]-0.0%");

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答