
DatagridviewをExcelシートに保存しています。
それを呼び出し再編集するとセルが青くなったり、セルの値が消えたり、操作ができなくなったり最終的にはエラーが出てしまいます。
これらを回避するにはどうしたらいいでしょうか?コマンドプロンプトかcsc.exeで実装しています。
コードはこちらです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
public class Form1 : Form
{
private DataGridView Grid1;
private DataGridView Grid2;
private DataGridView Grid3;
private DataGridView Grid4;
public Form1()
{
InitializeComponent(); //自動生成するために必要
Grid1.CellFormatting += new DataGridViewCellFormattingEventHandler(dataGridView1_CellFormatting);//計算
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 5)
{
int v1, v2, v3;
if (Int32.TryParse((string)Grid1[6, e.RowIndex].Value, out v1)
&& Int32.TryParse((string)Grid1[7, e.RowIndex].Value, out v2)
&& Int32.TryParse((string)Grid1[8, e.RowIndex].Value, out v3))
{
Grid1[5, e.RowIndex].Value = (v1 - v2 - v3).ToString();
}
}
}
private void call(Object sender, EventArgs e)
{
Type objType = Type.GetTypeFromProgID("Excel.Application");
dynamic objXLS = Activator.CreateInstance(objType);
objXLS.Visible = true;
//string Cd = Directory.GetCurrentDirectory(); //現在のファイルパス
string strFileName = "パス名";
dynamic objBook = objXLS.Workbooks.Open(strFileName);
//エクセルに反映
Grid1.Rows[0].Cells[0].Value = objBook.Worksheets(1).Cells(4, 2).Value;
Grid1.Rows[1].Cells[0].Value = objBook.Worksheets(1).Cells(6, 2).Value;
Grid1.Rows[2].Cells[0].Value = objBook.Worksheets(1).Cells(8, 2).Value;
Grid1.Rows[3].Cells[0].Value = objBook.Worksheets(1).Cells(10, 2).Value;
Grid1.Rows[4].Cells[0].Value = objBook.Worksheets(1).Cells(12, 2).Value;
・・・省略(Grid数4つ、列行数様々を反映させています)
objBook.Close(true); objBook = null; //Excelクローズ
objXLS.Quit(); objXLS = null; //Excel終了
}
関係ありそうなコードだけ記載しました。どの部分を修正が必要でしょうか?

No.2ベストアンサー
- 回答日時:
(1) プログラムを見ると 「DataGridViewをExcelに保存」でなく、「 Excelの内容をDataGridViewに出力」に見えるのですが。
(2) エラーメッセージには、DoubleをStringにキャストできない、と書いてあります。
提示されたプログラムでstringにキャストしているのは
if (Int32.TryParse((string)Grid1[6, e.RowIndex].Value, out v1)
&& Int32.TryParse((string)Grid1[7, e.RowIndex].Value, out v2)
&& Int32.TryParse((string)Grid1[8, e.RowIndex].Value, out v3))
の部分です。
Grid1[?, e.RowIndex].Value がdoubleになっているのでは?
ありがとうございます。
(1)保存ではなく出力でしたね。失礼しました。
(2)質問にあげたコードでは整数の計算をしています。6~8列は0~10000台の整数、Gridの1列と2列は時間(Excelでいう書式設定HH:mm。それを呼び出すと小数点で表示←ここですね)となっています。回避方法はありますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaのprivate finalメンバにつ...
-
オーバーライド
-
コンストラクタについて
-
SJC-Pの問題で分からない部分が...
-
継承プログラムについて
-
考えてもちっともいい案が出て...
-
続き webアプリをつくってます...
-
プログラミングの問題です。大...
-
日付の比較をしたいのですが・...
-
パッケージ化されたクラスより...
-
Javaの参照渡し
-
javaでLOOKUPその2
-
JavaによるXMLの読み込みについて
-
動作説明をお願いします。
-
変数を動的に利用するには?
-
バッチファイルごしのシステム...
-
java classの呼び出し方を教え...
-
ArrayList でスタックを
-
JAVAのComparableについて・・・
-
pasteHTMLでパスが勝手に変換さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
中カッコ{}だけの記述について
-
プログラミングの問題です。大...
-
初心者なので教えてほしいです。
-
Javaでlog4jを使ってログ出力を...
-
コンストラクタの引数の中のnew?
-
System.exit()の値を取得したい
-
JSP/Servletのパラメータの受け...
-
GetterとSetterをやったのに。
-
javaで処理のやり方がわかりま...
-
オーバーロードで
-
Timerについて教えて下さい
-
NoSuchMethodErrorが解決できま...
-
インタフェイス実装と抽象クラ...
-
randomで
-
C# DatagridviewにExcelシート...
-
javaのプログラミングで作るRPG...
-
所持金の計算式とその表示の仕方
-
【java】同ディレクトリ別ファ...
-
多次元配列の出力のところがわ...
おすすめ情報
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using System.Reflection;
を追加してみましたが、コマンドプロンプトで型または名前空間名 'Office' は名前空間 'Microsoft'
に存在しません。アセンブリ参照が不足しています。
と出てしまいました。