@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Excel(.xls)の読み書きについて

投稿者投稿内容
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-05-24 10:33
OS:XP
VC2005 C++/CLI
で開発しています。

.net2005で、Excelファイルへの読み書きのやり方が
分かりません、どのように行うのでしょうか?
以前のように、Officeライブラリを追加して行おうとしたのですが
出来ませんでした。よろしく御願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-24 11:16
引用:

kenさんの書き込み (2006-05-24 10:33) より:

.net2005で、Excelファイルへの読み書きのやり方が
分かりません、どのように行うのでしょうか?


VSTO を使う、COM Interop を使う、Excel の VBA にお任せするなど色んな方法があります。

引用:

以前のように、Officeライブラリを追加して行おうとしたのですが
出来ませんでした。よろしく御願いいたします。


以前のように? Office ライブラリというのは、
PIA (プライマリ相互運用 機能アセンブリ) のことでしょうか?

具体的に "何を" して "何が" 起きたために、"期待通り" にならなかったのでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-05-24 12:42
じゃんぬねっと様
レスありがとうございます。

すみません、言葉が足りませんでした。

実現しようとしていることは、ファイルアクセスです。
(テキストファイルやcsvファイルにデータを書いたりする。)

開発中のWindowsアプリから、エクセルファイルに対して
セルなど指定して書ければと思います。

以前は、参照設定から、 Office Object Library を
使って出来たと思ったのですが。。VBだったかもしれません・・

何か、良い方法は、ご存知でしょうか?。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-24 12:48
引用:

kenさんの書き込み (2006-05-24 12:42) より:

実現しようとしていることは、ファイルアクセスです。
(テキストファイルやcsvファイルにデータを書いたりする。)


それだったら、Excel というコンポーネントを使う必要がないように思います。

引用:

開発中のWindowsアプリから、エクセルファイルに対してセルなど指定して書ければと思います。


Excel Book ファイルなんですか? (上と言っていることが違うような...)
それとも、UI 上 'だけ' の話なんでしょうか?

引用:

以前は、参照設定から、Office Object Library を
使って出来たと思ったのですが。。VBだったかもしれません・・
何か、良い方法は、ご存知でしょうか?。


Office Object Library とは、こちらのことでしょうか?

  4D Office Object Library

Microsoft Excel xx.x Object Library などではないんですよね?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-05-24 13:02
じゃんぬねっと様
レスありがとう御座います。

>実現しようとしていることは、ファイルアクセスです。
>(テキストファイルやcsvファイルにデータを書いたりする。)
↑分かりやすく言ったつもりでした、、ExcelBookファイルに
書き込もうとしています。(.xls)

ExcelBookファイルに、データは、書き込むことは、
出来ないのでしょうか??。
VBですが以下のような、感じで、VCで実現
する、方法は、ご存知でしょうか?

例:VBです。
-------------------------------------------
Set exl = CreateObject("Excel.Sheet")
exl.Sheets(1).Name = "test"
exl.Application.Visible = True
exl.Windows.Arrange ArrangeStyle:=1
k = GetCntCSV(fnm)
Open fnm For Input As #1 Len = 32000
j = 1
Do Until EOF(1)
For i = 1 To k
Input #1, rec
exl.worksheets(1).Cells(j, i).Value = rec
Next
j = j + 1
Loop
-------------------------------------------


>Microsoft Excel xx.x Object Library などではないんですよね?
こちらの事です。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-24 13:43
引用:

kenさんの書き込み (2006-05-24 13:02) より:

ExcelBookファイルに、データは、書き込むことは、出来ないのでしょうか??。


できますよ。

引用:

VBですが以下のような、感じで、VCで実現する、方法は、ご存知でしょうか?


つまり、参照設定はしているが、コード自体が書けないということなのでしょうか?

引用:

以前のように、Officeライブラリを追加して行おうとしたのですが
出来ませんでした。よろしく御願いいたします。


ですと、参照設定の時点で躓いているのか、コードの書き方がわからないのか、
コードを書いてみたがうまく動作しなかったのか、私にはわからなかったのです。
うまく汲み取れなかったようで、すみません。

C++/CLI ということでしたので、以下のような感じになるかと思います。

コード:

    public ref class Form1 : public System::Windows::Forms::Form
    {

        :
        略
        :

    private:
        System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
            Excel::Application^ xlApplication = nullptr;
            
            try {
                xlApplication = gcnew Excel::Application();
                xlApplication->Visible = true;
                Excel::Workbooks^ xlWorkbooks = nullptr;

                try {
                    xlWorkbooks = xlApplication->Workbooks;
                    Excel::Workbook^ xlWorkbook = nullptr;

                    try {
                        xlWorkbook = xlWorkbooks->Add(System::Reflection::Missing::Value);
                    } finally {
                        if (xlWorkbook != nullptr) {
                            System::Runtime::InteropServices::Marshal::ReleaseComObject(xlWorkbook);
                        }
                    }
                } finally {
                    if (xlWorkbooks != nullptr) {
                        System::Runtime::InteropServices::Marshal::ReleaseComObject(xlWorkbooks);
                    }
                }
            } finally {
                if (xlApplication != nullptr) {
                    System::Runtime::InteropServices::Marshal::ReleaseComObject(xlApplication);
                }
            }
        }
    };


[*] 念のためですが、「Excel を起動して新しい Book を追加しているだけ」のサンプル コードです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-05-24 14:42
じゃんぬねっとさん
レスありがとう御座います。

サンプルコードありがとう御座います。
試してみましたのですが、エラーが出てしまいました。

error C2653: 'Excel' : 識別子がクラス名でも名前空間名でもありません。

Excelの名前空間は、どこにあるのでしょうか??

>Microsoft Excel xx.x Object Library などではないんですよね?
参照追加は、必須なのでしょうか??

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-24 15:15
引用:

kenさんの書き込み (2006-05-24 14:42) より:

error C2653: 'Excel' : 識別子がクラス名でも名前空間名でもありません。
Excelの名前空間は、どこにあるのでしょうか??


参照設定が追加されていないのでしょう。

引用:

参照追加は、必須なのでしょうか??


ええ、そりゃ必須ですよ。

# やはり、参照設定の段階で躓いていたんですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)