GridWeb儲存格自訂數值格式顯示異常

  • NET版本: .Net FrameWork 4.7.2
  • GridWeb版本: 24.6

在使用GridWeb瀏覽時,有些數值顯示上前面會有異常的空白,導致數值被推到後面,
如下圖E欄都套用同一種公式,但E4、E5會被推到後面,必須手動調整欄寬才能看到數值。

此問題在異動任意儲存格後就會復原,如下圖我在F8加上"123",原先E4、E5的異常就不見了

經過反覆測試發現大概是在以下狀況會發生 :

  1. 套用某些自訂數值格式設定時
  2. 儲存格設定為粗體

想請問此問題,在載入檔案的時候有什麼辦法解決嗎?
再麻煩協助,謝謝!

這邊附上測試用的Excel檔案
test3.zip (7.4 KB)

@Willy_Weng
你试试更新下js到最新版本

https://unpkg.com/gridweb-spreadsheet@24.6.0/acw_client/acwmain.js

我这边看到的效果是这样的,没问题

QQ截图20240621140308.png (23.0 KB)

感謝回覆,
目前確認js版本已經是24.6了。

不好意思可能表達得不是很清楚,
我的問題在你的圖片中看起來也存在,數值在儲存格一般會靠右顯示沒錯,
但E欄位的數值左側明明有空間,但卻不知為什麼會被隱藏起來

這邊提供簡易的Project供參考,謝謝
GridWebDemo.zip (7.2 MB)

@Willy_Weng
确实刚加载完成后没有显示全,在excel里面是显示完全的,
只有进行了更新操作之后才会显示的完整。
初步评估是需要调整html的样式之类的,我们建了跟踪单子,来改进它。

Issue ID(s): CELLSNET-56032

You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.

1 Like

@Willy_Weng
我进一步观察,这个主要原因是因为excel的默认字体导致的问题
因为这个单元格设置了前面有空格填充,他的style.custom 为:-* #,##0-;-* #,##0_-;-* “-”??-;-@-
所以它实际的显示值前面有很多空格,所以数字文本内容被挤过去了。
然后我观察了空格填充的多少,是由excel文件的默认字体导致的,你这个excel文件的默认字体是“新細明體”
GridWeb1.WorkSheets.DefaultFontName
或者直接用cells api 的workbook.DefaultStyle.Font.Name
都能看出来
目前的workaround是设置一个运行系统上支持的默认字体例如 “等线”
(比如我这边把你那个excel文件用excel编辑后保存,发现它的默认字体就从原来的“新細明體”
变成了“等线”)

...
                   GridWeb1.ImportExcelFile(filePath);
                    if(!IsFontInstalled(GridWeb1.WorkSheets.DefaultFontName))
                    {  GridWeb1.WorkSheets.DefaultFontName = "等线";
                    }
...
        static bool IsFontInstalled(string fontName)
        {
            using (InstalledFontCollection installedFonts = new InstalledFontCollection())
            {
                foreach (var fontFamily in installedFonts.Families)
                {
                    if (fontFamily.Name.Equals(fontName, StringComparison.OrdinalIgnoreCase))
                    {
                        return true;
                    }
                }
            }
            return false;
        }

在设置了等线 之后,它对单元格显示内容的空格补齐,就对了。