1

しばらくの間、EPPlus(Office Open XML)でAzure Webロールを操作してきましたが、最近Azure Webサイトを試していると、非常に奇妙なエラーが発生します。

[DivideByZeroException: Attempted to divide by zero.]
   System.Decimal.FCallDivide(Decimal& d1, Decimal& d2) +0
   OfficeOpenXml.Drawing.ExcelDrawing.SetPixelWidth(Int32 pixels, Single dpi) +465
   Compliance.Net.CommonCode.PivotGenerator.GeneratePivotTable(ExcelWorksheet dataWorksheet, ExcelWorksheet pivotWorksheet, Int32 endRow)

AzureWebRoleで実行しているのと同じデータとコードでこれを取得しています。

編集: 問題のある行は次のようになります:

 var chart = pivotWorksheet.Drawings.AddChart("PivotChart", eChartType.ColumnClustered, pivotTable);
 chart.SetPosition(endRow + 2, 20, 1, 10);
 chart.SetSize(600, 400);

'endRow'が>1であることを確認したことに注意してください。

何か案は?

4

1 に答える 1

2

私自身も同じ問題を抱えていたので、EPPlusソースをプルして、調査を行いました。

問題はExcelWorkbook.csの283行目にあります。

System.Windows.Forms.TextRenderer.MeasureText(string、Font).Width

これは、AzureWebサイトでゼロを返すように見えます。

行を追加しました

if(_standardFontWidth == 0)_standardFontWidth = 7;

(7は私がローカルで取得していた値だったので、デフォルトとして機能します-マイレージは異なる場合があります)

    public decimal MaxFontWidth 
    {
        get
        {
            if (_standardFontWidth == decimal.MinValue)
            {
                var font = Styles.Fonts[0];
                System.Drawing.Font f = new System.Drawing.Font(font.Name, font.Size);
                _standardFontWidth=(decimal)(System.Windows.Forms.TextRenderer.MeasureText("00", f).Width - System.Windows.Forms.TextRenderer.MeasureText("0", f).Width);
            }
            if (_standardFontWidth == 0) _standardFontWidth = 7;
            return _standardFontWidth;
        }
    }

もちろん、これはソースからEPPlusを構築することを意味し、7の値は異なる場合がありますが、これは私にとって便利な回避策です。

于 2012-09-18T09:17:17.047 に答える