0

C# とスプレッドシート ライトを使用して、データ テーブル データを Excel にエクスポートしています。私のコードは機能していますが、Excel ファイルを開くと、ほとんどのセル値に対してこの警告が表示されていることがわかりました。警告メッセージは、このセルの数値がテキストとしてフォーマットされていることです

データをExcelに保存する前に、この方法で範囲全体のフォーマットを設定します

 SLStyle standardstyle = new SLStyle();
 standardstyle.FormatCode = "#,##0.00";
 sheet.SetCellStyle("A1", "E6", standardstyle);

しかし、まだ運がありません。xls ファイルを開いた後に同じ警告が表示されます。

私のデータテーブルには数値データのようなデータがあり、数式を持つセルはほとんどありません。できれば表計算ライトで数式を評価したい。不可能な場合は、スプレッドシート ライトでデータを Excel ファイルに保存したい結果として、Excel は数式を評価しますが、このセルの数値がテキストとして書式設定されており、数式が書式設定されていないため、この警告が表示されている理由が明確ではありません。セル内の数値が数字ではなくテキストになるため、評価中です。

私はこの方法を試しました

1)最初にデータテーブルに数値データと数式を入力し、2番目のフェーズでそのデータテーブルをスプレッドシートライトでロードし、範囲全体のフォーマットコードを設定し、そのデータをスプレッドシートライトでExcelに保存します.

スプレッドシート ライトによって生成された Excel ファイルを開くと、警告がまだ存在し、式が評価されていないことがわかりました。結果値として 0 を示す数式。

私のデータ テーブルのスクリーン ショットを参照してください。結果として、データがデータ テーブルにどのように格納されているかが明確になります。 データ テーブルのスクリーン ショット

コードの最初のセット

            string strSum = "", strColName, strImmediateOneUp = "", strImmediateTwoUp = "";

            int startsum = 0;
            int currow = 0;
            bool firstTimeSum = true;

            int NumRows = 6;
            int NumColumns = 5;

            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();


            DataTable dt = new DataTable();

            for (int col = 0; col < NumColumns; col++)
            {
                strColName = GenerateColumnText(col);
                DataColumn datacol = new DataColumn(strColName, typeof(object));
                dt.Columns.Add(datacol);
            }


            for (int row = 0; row < NumRows; row++)
            {
                dt.Rows.Add();

                for (int col = 0; col < NumColumns; col++)
                {
                    if (row < 2)
                    {
                        dt.Rows[row][col] = Convert.ToInt32(new Random().Next(1, NumRows));
                    }
                    else
                    {
                        if (firstTimeSum)
                        {
                            if (row - currow == 2)
                            {
                                currow = row;
                                startsum = 0;
                                firstTimeSum = false;
                            }
                            else
                            {
                                startsum = 1;
                            }
                        }
                        else
                        {
                            if (row - currow == 3)
                            {
                                currow = row;
                                startsum = 0;
                            }
                        }


                        if (startsum == 0)
                        {
                            strColName = GenerateColumnText(col);
                            strImmediateOneUp = strColName + ((row + 1) - 1).ToString();
                            strImmediateTwoUp = strColName + ((row + 1) - 2).ToString();
                            strSum = string.Format("=SUM({0}:{1})", strImmediateTwoUp, strImmediateOneUp);
                            dt.Rows[row][col] = strSum;
                        }
                        else
                        {
                            dt.Rows[row][col] = Convert.ToInt32(new Random().Next(1, NumRows));
                        }
                    }

                }

                startsum = 1;
            }

コードの 2 番目のセット

    SLThemeSettings stSettings = BuildTheme();
    SLDocument sheet = new SLDocument(stSettings);
    sheet.ImportDataTable(1, 1, dt, false);
    //standard number format
    SLStyle standardstyle = new SLStyle();
    standardstyle.FormatCode = "#,##0.00";
    sheet.SetCellStyle("A1", "E6", standardstyle);

    sheet.SaveAs("d:\\SpreadsheetLight_formula.xlsx");
    sheet.Dispose();

私の望む出力は数式の評価であり、数式セルに正しい値が表示されます。データを Excel に保存せずに、スプレッドシート ライトで数式を評価して正しい値を表示できますか? できれば道を教えてください。

私のコードを見て、結果の数式を評価する必要があるため、コードに追加または変更する必要があるものを教えてください。ありがとう

4

0 に答える 0