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

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

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

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1839閲覧

スレッドでExcell読み込み

Genki0825

総合スコア3

C#

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2020/09/08 07:31

編集2020/09/09 05:29

#スレッドでExcell読み込み(NPOI,GetCellでエラー、一回目は〇)

前提・実現したいこと

・前提
ボタンを二つ用意して、それぞれでエクセルの値を読み込むREAD関数を実行しています。
一方はREAD関数をスレッドで実行しています。もう一方はREAD関数をそのまま(Nomal)実行をしています。
読み込むExcellファイルにはA行A列目に数値1のみが格納されています。
NuGetパッケージからNPOIをインストールしています。

・実現したいこと
NPOIを利用してExcellのデータ読み込みをスレッド実行で行います。
一度目は問題はなく値が読み取られています。
しかし、二度目の実行にてエラーメッセージが表示さるので改善したいです。

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

ソースコードの中央部の
string Name = row.GetCell(0).DateCellValue.ToString();//列指定読み込み    
にて以下のエラーメッセージが表示されます。

System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'

該当のソースコード

C#

1using System; 2using System.Windows; 3using NPOI.SS.UserModel; 4using System.IO; 5using System.Threading; 6 7namespace NPOI 8{ 9 /// <summary> 10 /// MainWindow.xaml の相互作用ロジック 11 /// </summary> 12 public partial class MainWindow : Window 13 { 14 public MainWindow() 15 { 16 InitializeComponent(); 17 } 18 19 /// <summary> 20 /// Thread実行 21 /// </summary> 22 /// <param name="sender"></param> 23 /// <param name="e"></param> 24 private void Button_Click_1(object sender, RoutedEventArgs e) 25 { 26 Thread TRead = new Thread(() => Read()); 27 TRead.Start(); 28 29 } 30 31    /// <summary> 32 /// Normal実行 33 /// </summary> 34 /// <param name="sender"></param> 35 /// <param name="e"></param> 36 private void Button_Click(object sender, RoutedEventArgs e) 37 { 38 Read(); 39 } 40 41     /// <summary> 42 /// 指定したExcellのファイルを展開し値を読み込むREAD関数 43 /// </summary> 44 private void Read() 45 { 46 //ファイルパス 47 string filiPass = @"D:\ProgramFiles\Visual Studio2019\Sample\NPOI\sample.xlsx"; 48 49 //Excellファイルの展開    50 FileStream fs = null;// ファイル取得用 51 IWorkbook readBook = null;// ブック格納用 52 53 try 54 { 55 using (fs = File.OpenRead(filiPass))// 読込用Excelファイルの読込 56 { 57 readBook = WorkbookFactory.Create(fs); 58 } 59 ISheet readSheet = readBook.GetSheetAt(0); // ワークシートの取得( 1番目のシート) 60 61 //データの読み込み 62 IRow row = readSheet.GetRow(0); // 行データ取得)                      63 string Name = row.GetCell(0).DateCellValue.ToString();//列指定読み込み        ⚠エラー発生個所 64 65 //ブックのリソース開放 66 readBook.Close(); 67 68 //読み込んだ値の表示 69 MessageBox.Show(Name); 70 } 71 catch 72 { 73 MessageBox.Show("EROOR"); 74 } 75 } 76 } 77}

試したこと

一回目のスレッド終了後、二回目のスレッド実行をするとエラーメッセージが発生します。

ノーマル実行でREAD関数を呼び出した場合は、何度呼び出しても問題ありません。

一回目をノーマル実行し、二回目をスレッド実行にした場合も同様のエラーメッセージが表示さます。

補足情報(FW/ツールのバージョンなど)

エラー箇所の一行上にある
IROW のrow のCellsのプロパティには
一回目も二回目も[0]={1}
が格納されています

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

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

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

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

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

hihijiji

2020/09/10 02:55

今時そのような用途にThreadを使っているから回答が付かないのかと、 なんでTaskじゃだめなの?
guest

回答1

0

自己解決

未解決ですが回答を締め切らせていただきます

投稿2020/10/06 23:44

Genki0825

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問