0

手動で抽出する必要がある Excel ファイル内の画像があります。Excel 2007 では非常にうまく機能するプログラムを作成しましたが、Excel 2003 では機能しません。

プロセス: ユーザーは Excel ファイルを開き、関連する画像をクリップボードにコピーします。ユーザーは C# アプリケーションを開き、クリップボードから画像を収集するボタンをクリックし、ユーザーから追加情報を収集します。

アプリケーション コードは非常に単純です。ボタンをクリックすると、次のコードが呼び出されます。

            if (Clipboard.GetImage() != null)
            {
                pictureBox1.Width = Clipboard.GetImage().Width;
                pictureBox1.Height = Clipboard.GetImage().Height;
                pictureBox1.Image = Clipboard.GetImage();

                //...more misc. code...
            }

これは Excel 2007 では問題なく機能しますが、Excel 2003 では機能しません。

次のデバッグ コードを試しましたが、すべて失敗しました。

Clipboard.ContainsImage() >> false を返す Clipboard.GetDataObject().GetDataPresent(DataFormats.Bitmap) >> false

Excel 2003 の「Office クリップボード」が干渉している可能性があると考えられますか? ただし、MS PAINT では画像の貼り付けに問題はありません。

ヘルプ?

4

2 に答える 2

2

私は解決策を見つけました。

どうやら Excel 2007 は、画像を同じファイル形式でクリップボードにコピーしないようです。Clipboard.GetDataObject().GetFormats() を反復処理したところ、次のものが含まれていることがわかりました。

Office Drawing Shape Format MetaFilePict EnhancedMetafile PNG+Office Art JFIF+Office Art GIF+Office Art PNG JFIF GIF ActiveClipboard

これを機能させるために、次のようにコードに 2 つ目のコードブロックを追加しました。

        if (Clipboard.GetImage() != null) //Excel 2007
        {
            pictureBox1.Width = Clipboard.GetImage().Width;
            pictureBox1.Height = Clipboard.GetImage().Height;
            pictureBox1.Image = Clipboard.GetImage();
            //...
        }
        else if(Clipboard.GetDataObject().GetDataPresent("PNG")) //Excel 2003
        {
            Clipboard.GetDataObject().GetFormats()
            IDataObject data = Clipboard.GetDataObject();
            MemoryStream ms = (MemoryStream)data.GetData("PNG");

            pictureBox1.Width = Image.FromStream(ms).Width;
            pictureBox1.Height = Image.FromStream(ms).Height;
            pictureBox1.Image = Image.FromStream(ms);
            //...
        }

そして、それは機能します。

于 2009-09-10T16:25:14.413 に答える
0

SpreadsheetGear for .NETは、Excel ワークブックを開いて、これらの例で示されているように、セルの範囲またはチャートから画像を取得できます(これらの例は ASP.NET 用ですが、WinForms アプリ、コンソール アプリなどでも同様に機能します...)。SpreadsheetGear は Excel に依存しないため、Excel 2003 がインストールされていても、Excel 2007 がインストールされていても、Excel がインストールされていなくても動作します。

ここから無料試用版をダウンロードできます。

免責事項: 私は SpreadsheetGear LLC を所有しています

于 2009-09-10T15:19:37.450 に答える