ピースペース

Excelで提供されたデータのインポートでNPOIを使ってみた

leave a comment »

以前、サーバーサイドでExcelファイルの読込、出力が必要になってNPOIが問題なく使えたので、
今回、ExcelからDBへのデータインポートにも利用してみた。
インポートプログラムはクライアントローカルで動かすのでCOMでもよかったし、
いまどきもはやxlsは対象外にするなら、Open XML を使うのが良かったのかもしれない。

入力データは、各シートにフォームのような感じで散らばっていて、
いろんな人が入力したいろんな形式のシートがあるいろんなフィイルを処理する必要があったので、
各シートのデータをKey,Valueな形にまとめるdataシートを追加して、
インポートプログラムはそのdataシートだけを読み込む作戦。

このとき、dataシートのValueセルは各入力シートの入力セルを参照しているわけで、
入力値を正しく表示するために、計算式やら書式などを設定している。
この書式を設定した計算式なセルが表示している文字列をNPOIで読み取る方法は、

DataFormatter formatter = new DataFormatter(CultureInfo.CurrentCulture);
IFormulaEvaluator evaluator = sheet.Workbook.GetCreationHelper().CreateFormulaEvaluator();
var result = formatter.FormatCellValue(cell, evaluator);

なのだが、ちょっと変わったユーザー定義書式などを使っていると、
Excelのシート上に表示されているとおりの結果にならない場合がある。
NPOIはNPOIであってExcelではない。ので、なんでもその通りになるわけじゃあない
研究員さんが言われているとおり、NPOIでセルの値を取得するのはけっこう大変なのだ。
http://shin-kawara.seesaa.net/article/159316670.html

てことで、この用途にNPOIを使うのは失敗だった。かもしれない;
さて、今後を考えると、
XMLなりJSONなりで入力データを出力できたり、読み込めたりするシートを作るのが良い気がする。
ならば、そもそもExcelである必要はあるの??
いまは亡きInfoPathがあればよかったのじゃないの
せめて、ExcelじゃなくてWordの方が良いんじゃないの
と思ってみるが、みんな大好きExcelなので、そんなことは考えてみても仕方ない。
XMLな入力フォームをきちんと作成する方法を学習することにしよう… いつかそのうち…

Written by nasu38yen

2015年10月28日 @ 7:24 PM

カテゴリー: .NET, プログラム

Tagged with

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。