🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Q&A

解決済

2回答

1568閲覧

C#でExcelに配列を使用して複数値を入力する方法

FM88mhmh

総合スコア22

C#

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

0グッド

0クリップ

投稿2021/03/15 09:29

編集2021/03/15 10:07

表題の内容についてなのですが、
下記のコードで回しているのですが値をとることすらできません。

Book1からデータを取得し、別のセルにコピーしてからBook2として保存しています。
特にエラーなどは出ず、数値の取得と出力ができていない状況です。

できればFor文を使わずにやりたいのですが(処理時間が短くなるみたいなので)、
お知恵をお貸しください。

よろしくお願いします。

環境:
Visual Studio 2017
Excel office 2019

パッケージ:Microsoft.Office.Interop.Excel v15.0.4795.1000

C#

1using System; 2using System.Runtime.InteropServices; 3using Excel = Microsoft.Office.Interop.Excel; 4using Microsoft.Office.Interop.Excel; 5 6namespace ConsoleApp2 7{ 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 string path = @"C:\Users\user01\Desktop\Book1.xlsx"; 13 string pathS = @"C:\Users\user01\Desktop\Book2.xlsx"; 14 15 object[,] objs = new object[3, 4]; 16 17 Excel.Application objExcel = null; 18 Excel.Workbook objWorkBook = null; 19 Excel.Sheets xlSheets = null; 20 Excel.Worksheet ws = null; 21 22 // ** EXCEL 開始処理 ************************************************************ 23 try 24 { 25 objExcel = new Excel.Application(); 26 objExcel.DisplayAlerts = false; 27 } 28 catch 29 { 30 throw new Exception("Microsoft Office Excelがインストールされていません。"); 31 } 32 33 if (System.IO.File.Exists(path) == false) 34 { 35 throw new Exception("エクセルファイルが見つかりませんでした。\n" + path); 36 } 37 38 try 39 { 40 objWorkBook = (Excel.Workbook)(objExcel.Workbooks.Open(path)); 41 xlSheets = objWorkBook.Sheets; 42 ws = xlSheets[1] as Worksheet; 43 44 Excel.Range rng = ws.Range["A1:C4"]; 45 46 objs = (object[,])rng.Value; 47 48 Marshal.FinalReleaseComObject(rng); 49 rng = null; 50 51 rng = ws.Range["A7:C10"]; 52 53 rng.Value2 = objs; 54 55 Marshal.FinalReleaseComObject(rng); 56 rng = null; 57 58 objWorkBook.SaveAs(pathS); 59 } 60 catch(Exception ex) 61 { 62 Console.WriteLine(ex.Message); 63 } 64 65 objWorkBook.Close(); 66 objExcel.Quit(); 67 68 Marshal.FinalReleaseComObject(ws); 69 ws = null; 70 Marshal.FinalReleaseComObject(xlSheets); 71 xlSheets = null; 72 Marshal.FinalReleaseComObject(objWorkBook); 73 objWorkBook = null; 74 Marshal.FinalReleaseComObject(objExcel); 75 objExcel = null; 76 77 GC.Collect(); 78 GC.WaitForPendingFinalizers(); 79 GC.Collect(); 80 } 81 } 82} 83 84

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

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

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

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

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

guest

回答2

0

自己解決

プロジェクト作成の際に.Net Coreを選択していたのが問題でした。
.Net Frameworkで作り直すとうまくいきました。

以下の警告が出ていたのを見逃していました。
ご回答いただきありがとうございました。

NU1701
パッケージ 'Microsoft.Office.Interop.Excel 15.0.4795.1000' はプロジェクトのターゲット フレームワーク '.NETCoreApp,Version=v2.1' ではなく '.NETFramework,Version=v4.6.1' を使用して復元されました。このパッケージは、使用しているプロジェクトとの完全な互換性がない可能性があります。

投稿2021/03/15 10:22

FM88mhmh

総合スコア22

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

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

0

私の環境では、提示されたソースコードで
A1:C4の内容がA7:C10にコピーされ、Book2が保存されることを確認しました。

途中端折らずにコード全文提示した方が良いかも知れませんよ。

投稿2021/03/15 10:01

sinya0320

総合スコア211

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

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

FM88mhmh

2021/03/15 10:07

ありがとうございます。 全文に変更しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問