我正照著這篇文章來操做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);
}
Excel檔案開啟時發生的問題
數字若有設定負數的數字建不見了(設定負數為紅色)
哀~只好降級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");
想要的結果~呼....
更新~增加百分比的資料若有負數的話
儲存格格式
//建立儲存格
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%");
2024-11-20 顏色問題更新
後來在某次搜尋再研究顏色問題後~
發現這個程式碼寫法~
文字顏色就可以秀出來了~
var font1 = xssfworkbook.CreateFont();
font1.FontName = "微軟正黑體";
font1.FontHeightInPoints = 18;
font1.Color = HSSFColor.Blue.Index;
Style.SetFont(font1);
原來 IndexedColors.Red.Index 是錯誤的..
正確是 HSSFColor.Red.Index