質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

12067閲覧

C#でのClosedxmlを使用した、テーブルのエクセル出力

saitaka0418

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

2クリップ

投稿2016/04/13 04:58

###前提・実現したいこと
ASP.Net、C#で、データベースのテーブルをそのままエクセル出力する機能を開発しております。
エクセルファイルの操作については、Closedxmlを使用しており、データベースから読み込んだテーブルをDataTable型にセット・読込を行い、エクセルファイルで保存しています。

###発生している問題・エラーメッセージ

入力文字列の形式が正しくありません。 文字列をDateTimeに変換するときに、DateTimeオブジェクトに各変数を指定する前に日付を取得する文字列を解析します。 ・・・

###該当のソースコード

/// <summary> /// Excelブックを新規に作成してデータテーブルの内容を出力します /// </summary> /// <param name="dt">DataTable</param> /// <param name="path">書き込み先のディレクトリパス</param> /// <param name="name">ファイル名称</param> /// <param name="header">ヘッダー指定</param> public static void DataTableToExcel2(System.Data.DataTable dt, string path, string name, Array header) { try { // ブックを作成 var workbook = new XLWorkbook(); //シート作成 var ws = workbook.Worksheets.Add(dt, "Sheet"); var rgn = ws.Range(1, ws.FirstColumnUsed().ColumnNumber(), ws.LastRowUsed().RowNumber(), ws.LastColumnUsed().ColumnNumber()); rgn.Style.Font.FontSize = 10; rgn.Style.Font.FontName = "メイリオ"; rgn.Style.NumberFormat.SetFormat("@"); ws.Cell("A1").InsertData(new[] { header }); //全部の列の幅を自動調整 ws.Columns().AdjustToContents(); //保存 var tmp = Path.Combine(path, name); workbook.SaveAs(tmp); } catch (Exception ex) { Console.Write(name + "を作成できませんでした。"); Console.Write(ex.Message); } }

###試したこと
テーブルにDateTime型のフィールドがあるので、セルの書式設定を文字列にしてみましたが、だめでした。
単純にDateTime型に入っている値を文字列としてエクセルに出力できればいいと思ってます。
DateTime型のないテーブルであれば、正常に処理は完了してます。

###補足情報(言語/FW/ツール等のバージョンなど)
ASP.Net、C#、ClosedXML

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

まだ原因はわかってないのですが、ws.Columns().AdjustToContents();で例外が発生しますね。
なんでかなぁ。

投稿2016/04/13 06:33

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saitaka0418

2016/04/13 06:36

回答コメントありがとうございます! rgn.Style.NumberFormat.SetFormat("@"); 一応上記コメントアウトで、それぞれの列の書式設定がDataTableに依存する形になったので、解決しました。 前0の入力があるところも、文字列として認識してくれたので、欠落せずに済みました。 しかし解決はしましたが、原因はいまだ分からずです・・・。
guest

0

rgn.Style.NumberFormat.SetFormat("@");

上記をコメントアウトしたところ、日付型としてエクセル側で認識されるようになりました。
しかしこれだと、前0があるような文字列データが欠落してしまいます・・・。

DataTableを一括でエクセルにセットするのではなく、ループで列ごとにセット、日付以外は書式設定・文字列でやるのが現実的でしょうか。

投稿2016/04/13 05:14

saitaka0418

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問