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

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

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

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

1回答

3878閲覧

ASP.NET(OLEDB)Excelへの出力で数値情報を数値情報として出力したい

433538

総合スコア4

ASP.NET

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/03/29 05:08

実装している事

ASP.NET(VB.NET)
OLEDBを利用しExcelファイルにテーブルの情報を書き込み。

出力したExcelファイルを利用者がフィルタリング等で絞り込みを実施し、
金額などの数値項目をExcelファイル上で集計したい。

現状の問題点

書き込み自体は成功しているが、金額(数値)の情報がExcelファイル上で、
テキスト形式で保存されてしまい、Excel上での金額集計が出来ない状態になっている。

「数値が文字列として保存されています」が表示されています。

解決したい事

Excelファイルに出力した際に、数値情報に関しては、数値情報として出力したい。

###試した事
・OleDbTypeをCurrencyの型指定

解決方法をお聞きできればと思います。

VB.NET

1oleConn = New OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; " + _ 2 "data source=" + DistFile + "; " + _ 3 "Extended Properties=Excel 8.0;") 4 5oleConn.Open() 6 Dim insertCommand1 As OleDb.OleDbCommand = New OleDb.OleDbCommand 7 insertCommand1.Connection = oleConn 8 insertCommand1.CommandText = "INSERT INTO [Sheet1$A1:A65535]" & _ 9 " (見積金額) VALUES(?)" 10 11 Dim param1 As OleDb.OleDbParameter = New OleDb.OleDbParameter 12 param1.ParameterName = "見積金額" 13 param1.OleDbType = OleDb.OleDbType.Currency 14 15insertCommand1.Parameters.Add(param1) 16insertCommand1.Parameters("見積金額").Value = String.Format("{0:#,0}", row(9)) 17

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/03/29 05:58

Excel 側の書式設定はどうなっているのですか? ところで、Excel ファイルを ASP.NET でどのように使っているのでしょう? まさか、サーバー側でデータを保持しておくための DB として使うということではないですよね?
433538

2020/03/29 06:20

書式設定は、標準になっています。(初期状態) データの保存としては、SQLServerを利用しています。 Excel ファイルの使い方としては、帳票として利用していますので、 SQLの結果をOleDbを利用しExcel ファイルに出力しています。
退会済みユーザー

退会済みユーザー

2020/03/29 22:03 編集

書式設定を数値にして INSERT してみましたが、自分の環境では入力がアポストロフィで始まる(例えば、'12345 のようになる)という結果で数値として認識されなかったです。解決策は分かりません。お役に立てずすみませんが、他の方の回答をお待ちください。 ASP.NET のタグが付いてますが、とりあえずは関係ないのでそのタグは外して(タグを見ただけで中身を見ずにスルーるる人もいると思いますので)、コンソールアプリで完全なコードを書いて、C# のタグ(ADO.NET のタグもあればそれも)を追加して質問する方が回答が集まりやすいかもしれません。
guest

回答1

0

Microsoft.Jet.OLEDB.4.0でのExcelへのINSERTは、文字列での挿入しか対応していないようです。
ただ、私の環境では、INSERT文でデータが埋め込まれるセルの一つ上のセルの書式が数値や通貨形式になっていると、挿入データは通貨形式になるようです。
(この場合、パラメータのOleDbTypeの指定は不要で、パラメータの値は数値型そのままを設定できます。)
もしかしたら、環境により上記振舞いは変わるかも知れませんので、一度試してみてください。
(そもそも、対象のExcelシートには元々データが挿入されているのでしょうか?)

なお、余談ですが、今はMicrosoft.Jet.OLEDBではなくMicrosoft.ACE.OLEDBを使った方がよい(場合によってはエンジンのインストールが必要)とされていますが、こちらも、Excelへのデータ更新は文字列として扱われるようです。

投稿2020/04/09 02:30

kenshirou

総合スコア772

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問