NPOIを使用しています。 私は生成する結果ブックの "テンプレート"として機能する2枚のシートを含むExcelブックを読みました。シート0はいくつかのヘッダー行を除いて空であり、シート1は数行の数式を有する。数式は一般にシート0を参照し、シート0からデータを引き出します。式の後にセル書式が適用されない
私はテンプレートのワークブックに直接書き込むことはできません。なぜなら、行を途中で動かす必要があり、コードが醜いので、2枚のシートで新しい結果ワークブックを作成するからです。プリセットされた構成ファイルに基づいて、この結果ワークブックのシート0にデータを行単位で移入し、テンプレートブックから特定の行のスタイルと数式を複製します。シート0はデータで満たされ、シート1は基本的に相対的にコピーされ、調整された式の行であり、通常はシート0からのデータをここやそこで小さな計算で引っ張る。 シート0のすべてのデータはテキストであり、数値、日付などと解釈できないため、データセルタイプをStringとして設定します。
コードでは、シート1とEvaluateInCellのすべてのセルをループします。 私は明らかに数式を評価するだけでなく、数式を削除し、コピー/計算結果を残すためにこれを行います。これは私がやっている仕事の必須条件です。我々は最終結果を提供し、数式は提供しない。 結果ブックを保存します。
一般的には、セルの書式設定がある場合を除き、書式設定は適用されないようです。 Excelでセルの書式プロパティを取得すると、書式設定が行われます。 たとえば、次のように表示されるデータの日時であるテキストデータがある可能性があります。 7/7/2016 9:54:55 AM これは元のデータテキストですが、カスタムセルフォーマットyyyymmddを持つ。 さらに、セルはまだ表示されます:7/7/2016 9:54:55 AM Excelで、最後に 'M'を削除して 'M'を再入力してEnterキーを押すなど、そのセルは目的のフォーマットに変更され、次のように表示されます。ここでもフォーマットはそのままです。
セルを手動で編集する必要はなく、顧客がExcelでブックを開いた後は何もしないでください。結果のワークブックを値の書式で開くようにします。 私は、暗闇の中のショットのように思えるいくつかのことを試しました。
this.ResultWorkbook.GetCreationHelper()。CreateFormulaEvaluator()。EvaluateAll(); ((XSSFWorkbook)this.ResultWorkbook).SetForceFormulaRecalculation(true);
しかし、これは役に立たなかった。 考えていますか?
"たとえば、私は日付データであるテキストデータを持っているかもしれません":日付時刻の値はExcelではテキストではなく、日付と小数部の整数部分を持つ倍値(1/24 = 1h、 1/24/60 = 1分、1/24/60/60 = 1秒、...)。そして、Excelはテキストを日付としてフォーマットしません**。したがって、 'SetCellValue(DateTime value)'を使って日付と時刻の値を入力する必要があります。 –
残念ながら私のコードはデータを解釈することができません。それは私のコードの単なる文字列であり、別の処理の結果であり、実行時に日時として解釈することはできません。場合によっては、データがすでにフォーマットされていることもあります。そうでない場合は、Excelのセルの書式設定が解決策として期待されます。これは何とかExcelのinteropのコードを外してNPOIに切り替える前に働いていました。 あなたはSetCellValueについて何を言っているのですか?それはデータが何であるか、それがすでに入っているフォーマットを知るために私のコードを必要とします。 – Buzz
"残念ながら私のコードはデータを解釈できません。"残念ながら、私はそれを助けることはできません。 –