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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

8515閲覧

C# ファイルの存在チェック

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

1クリップ

投稿2016/06/28 08:00

編集2016/06/28 08:52

ファイルの存在チェックにおいて
ファイルがある場合に上書き保存をしてファイルを開き、
ファイルがない場合に、用意しておいたファイルをコピーして別名で保存しファイルを開くようにする
ということをしているのですが、
上書き保存してファイルを開く方法が分かりません。

以下はファイルチェックのコードです。

// ファイル存在チェック if (System.IO.File.Exists(fpath) == true) { // ファイルあり } else { // ファイル無し // テンプレートファイルをコピーして別名ファイルで開く System.IO.File.Copy(@"用意しておいたファイルの格納場所\ファイル", fpath); } // ファイルチェック if (System.IO.File.Exists(fpath) == true) { //ファイルがある場合の処理 Application xlsApp = new Application(); //指定したパスのExcelを起動 Workbook wb = xlsApp.Workbooks.Open(Filename: fpath); //シートを指定 Worksheet sheet = wb.Sheets[1]; sheet.Select(); #region ===セルへの入力=== //省略 #endregion ===セルへの入力=== //Excelを開く xlsApp.Visible = true; // エクセル終了時の処理 xlsApp.Quit(); //シートオブジェクト開放 System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet); //ブックオブジェクト開放 System.Runtime.InteropServices.Marshal.ReleaseComObject(wb); //エクセルオブジェクト開放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp); } else { //ファイルがない場合の処理 return; } }

fpathはコピー後のファイルパスを変数に代入したものとなっています。
このままだとコピーして作られたファイルがそのまま開かれるようになっています。
順序としてはもとからあるファイルにプログラムでセルの中身を書き、データを渡し、開く。
このとき、もとからあるファイルをコピーして別名で保存するようにしてあります。
そのファイルが作成済みの場合に上書きという形にしたいのです。
ファイルがない場合は、あるコードを取得してきて、そのコードをテキストとして
ファイル名に追加するようにしています。

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

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

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

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

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

Zuishin

2016/06/28 08:05

どういう悩みなのかが全く理解できません。 コピーして作られたファイルをそのまま開いたのではだめなのですか? 上書き保存してファイルを開く場合なら、コピーはしないのではないですか?
退会済みユーザー

退会済みユーザー

2016/06/28 08:13

このコードで、なかった場合に ファイルが複製されました。 あった場合も、なかった場合も ファイルは開かれていませんが、このあと fpath のファイルを開くコードが続くのでしょうか?
Zuishin

2016/06/28 08:24

開くコードは書かれていませんから書かなくてはいけないと思いますが。
guest

回答2

0

ベストアンサー

いろいろやっていて解決できたのでこっちに書きます。

public void Excel操作(int denpyo_id) { denpyo_id = 2; // TODO テスト用のため要削除 claim_voucher EX = new claim_voucher(); int err = Common.db.SELECTデータ取得(ref EX, denpyo_id); string Tpath = Common.ファイルパス(); string Fpath = Common.ファイルパス(denpyo_id); bool fileflg = false; // テンプレートファイルのファイル存在チェック if (System.IO.File.Exists(Tpath) == true) { try { // fileflgがfalseで新規作成 fileflg = false System.IO.File.Copy(Tpath, Fpath); // 伝票番号付きファイルのファイル存在チェック if (System.IO.File.Exists(Fpath) == true) { //ファイルがある場合の処理 Worksheet sheet = null; Application xlsApp = null; Workbook wb = null; try { xlsApp = new Application(); //指定したパスのExcelを起動 wb = xlsApp.Workbooks.Open(Fpath); //シートを指定 sheet = wb.Sheets[1]; sheet.Select(); // セルの中身を書く // Excelを開く xlsApp.Visible = true; // Excelダイアログ非表示 wb.Application.DisplayAlerts = false; // Excelの保存 wb.SaveAs(Common.ファイルパス(denpyo_id)); // Excel wb.Application.DisplayAlerts = false; } catch { // Excelファイルの作成に失敗 // エクセル終了時の処理 xlsApp.Quit(); // Excel削除 System.IO.File.Delete(Fpath); } finally { if (sheet != null) { // シートオブジェクト開放 Marshal.ReleaseComObject(sheet); } // ブックオブジェクト開放 Marshal.ReleaseComObject(wb); // エクセルオブジェクト開放 Marshal.ReleaseComObject(xlsApp); } } } catch { // fileflgがtrueで上書き処理 fileflg = true; // ここからはtryの中と同じ } } else { return; } }

投稿2016/07/01 04:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

どうしたいのかよく理解できないのですが、私だったらこう書くということで

C#

1// ファイル存在チェック(fpath はファイルがあるべき場所) 2if (!System.IO.File.Exists(fpath)) 3{ 4 // ファイル無し 5 // テンプレートファイルをコピーして別名ファイルで開く 6 System.IO.File.Copy(@"用意しておいたファイルの格納場所\ファイル", fpath); 7} 8// ファイルが無かった場合にはファイルがコピーされたので、fpath は必ずファイルが存在する 9 10//ファイルがテキストファイルだとして、その中身をコンソールに出力 11foreach (string line in System.IO.File.ReadLines(fpath)) 12{ 13 Console.WriteLine(line); 14}

投稿2016/06/28 08:30

Zuishin

総合スコア28656

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問