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

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

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

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

Q&A

解決済

4回答

5051閲覧

エクセルのシートを追加

Genki0825

総合スコア3

C#

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

0グッド

0クリップ

投稿2020/07/27 07:35

編集2020/07/27 07:42

前提・実現したいこと

C#でエクセルのブックとシートの作成の後さらに、
エクセルのシートを追加しようとしています。
以下のエラーメッセージが発生しました。

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

System.Runtime.InteropServices.COMException: 'HRESULT からの例外:0x800A03EC'

該当のソースコード

using System;
using System.Collections.Generic;
using System.Windows;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using System.IO;
using NPOI.SS.UserModel;
using System.Windows.Documents;
using System.Linq;

Excel.Application ExcelApp = null; Excel.Workbooks workbooks = null; Excel.Workbook wb = null; Excel.Sheets sheets = null; Excel.Worksheet ws = null;

//Excelシートのインスタンスを作る
ExcelApp = new Excel.Application();
workbooks = ExcelApp.Workbooks;
wb = workbooks.Add();
sheets = wb.Sheets;

//アクティブシート(の直前)にシートを追加
wb.Worksheets.Add(After: sheets);
ws.Select(Type.Missing);
ExcelApp.Visible = false;// Excelの表示(非表示はfalse)

試したこと

シートを追加するために以下のコードの部分を追加しましてみました。
wb.Worksheets.Add(After: sheets);
ここでエラーが生じます

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

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

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

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

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

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

guest

回答4

0

Spire.XLSで同じエクセルの中でシートを追加することです。

Workbook workbook = new Workbook(); workbook.LoadFromFile("DoughnutChart.xlsx"); //初めのシートを取得します。 Worksheet sheet1 = workbook.Worksheets[0]; //新しいシートを追加します。 Worksheet sheet2 = workbook.Worksheets.Add("Copy"); //初めのシートを新しいシートにコピーします。 sheet2.CopyFrom(sheet1); //保存します。 workbook.SaveToFile("DoughnutChart.xlsx");

投稿2020/11/25 05:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

Spire.XLSで同じエクセルの中でシートを追加することができます。

Workbook workbook = new Workbook(); workbook.LoadFromFile("DoughnutChart.xlsx"); //初めのシートを取得します。 Worksheet sheet1 = workbook.Worksheets[0]; //新しいシートを追加します。 Worksheet sheet2 = workbook.Worksheets.Add("Copy"); //初めのシートを新しいシートにコピーします。 sheet2.CopyFrom(sheet1); //保存します。 workbook.SaveToFile("DoughnutChart.xlsx");

投稿2020/11/25 05:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

自己解決

すみません。以下のようにしたら解決しました。

「ExcelWB.Worksheets.Add」処理で行ってます。
ws = sheets[1];
を追加して、書き換えたら解決しました。
アクティブなシートが指定できてなかったのかもしれません。

//Excelシートのインスタンスを作る
ExcelApp = new Excel.Application();
workbooks = ExcelApp.Workbooks;
wb = workbooks.Add();
sheets = wb.Sheets;
ws = sheets[1];

//アクティブシート(の直前)にシートを追加
wb.Worksheets.Add( Type.Missing, ws, 2);
ws.Select(Type.Missing);
ExcelApp.Visible = false;// Excelの表示(非表示はfalse)

投稿2020/07/27 08:18

編集2020/07/27 08:26
Genki0825

総合スコア3

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

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

YAmaGNZ

2020/07/27 08:43

「アクティブなシートが指定できてなかったのかもしれません」 違います。Sheetsは「シートのコレクション」です。 引数として「シート」が要求されているのに「シートのコレクション」を渡していたのでエラーとなっていました。 同じことをするのであれば wb.Worksheets.Add(Type.Missing, wb.ActiveSheet, 2); とすればいいはずです。 また、コメントで「アクティブシート(の直前)にシートを追加」とありますが、Afterの引数に指定しているので「アクティブシート(の後ろ)にシートを追加」です。
guest

0

Sheets.Add(Object, Object, Object, Object) Method
こちらにある通り、Afterに指定するのはシートです。

投稿2020/07/27 07:49

YAmaGNZ

総合スコア10489

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

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

Genki0825

2020/07/27 08:17

ご回答ありがとうございます。 sheets.Add( Type.Missing, sheets, 2);で試してみましたが、 Add関数がないといわれました。VBAとは違うのかと。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問