• 締切済み

C# Excelファイルへの画像挿入。

C# shapes.AddPictureによるExcelファイルへの画像挿入。 現在、C#でExcelファイル(xls)にPNG画像を貼り付けるツールを作成しています。 以下のプログラムを実行したのですが、 shapes.AddPicture(@"C:\test.png", MsoTriState.msoFalse,MsoTriState.msoFalse,fx, fy, 100,100); の部分で以下の様なエラーが表示されました。 ---------------- エラー文 ---------------- 型 'System.Runtime.InteropServices.COMException' のハンドルされていない例外が mscorlib.dll で発生しました 追加情報: 指定された値は境界を超えています。 ---------------- つきましては解決方法を教えてください。 ----------------------- プログラム ----------------------- Excel.Application exApp = new Excel.Application(); Excel.Workbook wkbook; Excel.Workbooks wkbooks = exApp.Workbooks; exApp.Visible = true; exApp.DisplayAlerts = false; wkbook = (Excel.Workbook)wkbooks.Open(@"C:\test.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Excel.Sheets sheets = wkbook.Worksheets; Excel.Worksheet wksheet = (Excel.Worksheet)sheets["test"]; Excel.Range cells = wksheet.Cells; Excel.Range range = (Excel.Range)cells[1, 21]; range.Select(); Excel.Shapes shapes = wksheet.Shapes; float fx = float.Parse(range.Left.ToString()); float fy = float.Parse(range.Top.ToString()); shapes.AddPicture(@"C:\test.png", MsoTriState.msoFalse,MsoTriState.msoFalse,fx, fy, 100,100); -----------------------

みんなの回答

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

> shapes.AddPicture(@"C:\test.png", MsoTriState.msoFalse,MsoTriState.msoFalse,fx, fy, 100,100); 第2引数(msoFalse→画像を直接貼り付ける)と第3引数(msoFalse→文書と共に画像を保存しない)とが矛盾しています。 リファレンスを参照して、適切な引数を設定してください。

参考URL:
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.excel.shapes.addpicture%28v=office.11%29.aspx

関連するQ&A

  • C# Excel 背景色設定 色が出ない

    C#でExcelを作るプログラムを作成しています。 背景色を任意の色に設定したいのですが、 設定出来る色と出来ない色があるようで、 両者の違いがよくわかりません。 もし原因をご存知の方がいらっしゃいましたらご教授ください。 実行環境とソースは以下のものとなります。 ----- 実行環境ここから Microsoft Visual Studio 2005 Version 8.0.50727.42 (RTM.050727-4200) Microsoft .NET Framework Version 2.0.50727 SP2 Microsoft Visual C# 2005(Edition: Professional) Interop.Excel.dll: 1.3.0.0 ----- 実行環境ここまで ----- ソース抜粋ここから // 準備 string fileName = "D:\\project\\test.xls"; Excel.Application app = new Excel.Application(); app.Visible = false; Excel.Workbook workbook = app.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); workbook.Activate(); Excel.Sheets sheets = workbook.Sheets; Excel.Worksheet sheet = (Excel.Worksheet)sheets[sheets.Count]; // 色指定"#FFFFEE" -> 白で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[1, 1])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFFFEE")); // 色指定"#CCFFFF" -> 指定色で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 2], sheet.Cells[1, 2])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#CCFFFF")); // 色指定"#FFCCFF" -> 白で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 3], sheet.Cells[1, 3])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFCCFF")); // 色指定"#FFF3F9" -> 白で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 4], sheet.Cells[1, 4])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFF3F9")); // 色指定"#FFFF33" -> 指定色で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 5], sheet.Cells[1, 5])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFFF33")); // 色指定"#FFCC33" -> 指定色で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 6], sheet.Cells[1, 6])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFCC33")); // 終了処理 workbook.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing); workbook.Close(false, Type.Missing, Type.Missing); app.Quit(); ----- ソース抜粋ここまで

  • 画像のプロパティー書き出し

    Excelに画像(例:001.bmp)のプロパティー情報の書き出し方を 教えてください。 "全般"タブの書き出し方はだいたい調べて解りました。 *下記コード参考 "概要"タブの書き出し方がわかりません。 下記のように入力するにはどうしたら良いのでしょうか? 教えてください。 *参考コード* ThisWorkbook.Sheets(1).Range("A1") = "パス" ThisWorkbook.Sheets(1).Range("B1") = "ファイル名" ThisWorkbook.Sheets(1).Range("C1") = "ファイル種別" ThisWorkbook.Sheets(1).Range("D1") = "最終更新日" ThisWorkbook.Sheets(1).Range("E1") = "フルパス" ~省略~ ThisWorkbook.Sheets(1).Cells(i, 1) = Target 'ファイル名 sFile = Fx.Name 'ファイル名の書き出し ThisWorkbook.Sheets(1).Cells(i, 2) = sFile 'ファイル種別 sFType = Fx.Type '最終更新日時の書き出し ThisWorkbook.Sheets(1).Cells(i, 3) = sFType '最終更新日 sLMod = Fx.DateLastModified ThisWorkbook.Sheets(1).Cells(i, 4) = sLMod 'フォルダフルパス SFull = Target & "\" & sFile ThisWorkbook.Sheets(1).Cells(i, 5) = SFull

  • C#でのEXCEL出力に関して

    教えて下さい。 C#でEXCELシートにデータを出力していますが、その際に以下のような記述をした場合、 EXCELファイルは作成されるものの、そのファイルをダブルクリックで開こうとすると、 EXCELの枠だけ表示され、中身のシートが表示されない現象となってしまいます。 それらしきオブジェクトはすべて開放しているつもりですが、その事象を解決できません。 どこがおかしいか教えて頂きたいと思います。 記述に過不足あればご指摘下さい。 尚、環境は、WindowsXP Office2000-EXCEL です。 《記述内容》 ////////////////////////////////// //ここからエクセルシートへの転記// ////////////////////////////////// Excel.Application objExcel = null; Excel.Workbooks objBooks = null; Excel.Workbook objBook = null; Excel.Worksheet sheet = null; Excel.Range range1 = null; Excel.Range range2 = null; Excel.Range range3 = null; //ExcelのCOMオブジェクトの生成 objExcel = new Excel.Application(); //Excelを表示する設定 //objExcel.Visible = isVisible; //ワークブックの集合体取得 objBooks = objExcel.Workbooks; //ブックの新規作成 objBook = objBooks.Add(Missing.Value); //シートを取得 sheet = (Excel.Worksheet)objBook.Sheets.get_Item(1); //Rangeを取得 range1 = (Excel.Range)sheet.Cells[1, 1]; range2 = (Excel.Range)sheet.Cells[1, 2]; //文字列を設定 //ヘッダ書き込み range1.Value = "仕入先名"; range2.Value = "図面番号"; //エクセルシート側の行数カウント変数 int rcount = 2; //データテーブル側の行数カウント変数 int tcount = 0; for (tcount = 0; tcount < mst_cnt;tcount++ ) { range1 = (Excel.Range)sheet.Cells[rcount, 1]; range2 = (Excel.Range)sheet.Cells[rcount, 2]; range1.Value = 仕入先名[tcount]; range2.Value = 図面番号[tcount]; rcount++; } //エクセルシート削除 DeleteFile(@"c:\\" + h_no + ".xls"); //エクセルシート生成 objBook.SaveAs( "c:\\" + h_no + ".xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 0, Missing.Value, Missing.Value, Missing.Value, Missing.Value ); //COMオブジェクト解放 Marshal.ReleaseComObject(range1); Marshal.ReleaseComObject(range2); //COMオブジェクトの開放(必須) Marshal.ReleaseComObject(objBook); objBook = null; Marshal.ReleaseComObject(sheet); sheet = null; Marshal.ReleaseComObject(objBooks); objBooks = null; //System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel); objExcel.Quit(); Marshal.ReleaseComObject(objExcel); objExcel = null; //objExcel.Quit(); return; } よろしくお願いします。

  • Excelマクロ 最後に画像を貼付けたい…

    Excelにファイル名、情報、画像を表示するマクロを作成したいと いろいろ探し、以下の参考マクロを探しました。 Sub MakeFileList() Target = InputBox("ディレクトリ名を入力", "ディレクトリの指定", "C:\Windows") Set FS = CreateObject("Scripting.FileSystemObject") Set Fol = FS.GetFolder(Target) Set Fil = Fol.Files ThisWorkbook.Sheets("Sheet1").UsedRange.Delete '見出しを付ける ThisWorkbook.Sheets(1).Range("B2") = "ファイル名" ThisWorkbook.Sheets(1).Range("C2") = "ファイル種別" ThisWorkbook.Sheets(1).Range("D2") = "最終更新日" ThisWorkbook.Sheets(1).Range("E2") = "説明" ThisWorkbook.Sheets(1).Range("B2:E2").Interior.Color = RGB(0, 0, 0) ThisWorkbook.Sheets(1).Range("B2:E2").Font.Color = RGB(255, 255, 255) ThisWorkbook.Sheets(1).Range("B2:Es2").HorizontalAlignment = xlCenter i = 3 For Each Fx In Fil 'ファイル名 sFile = Fx.Name 'ファイル名の書き出し ThisWorkbook.Sheets(1).Cells(i, 2) = sFile 'ファイル種別 sFType = Fx.Type '最終更新日時の書き出し ThisWorkbook.Sheets(1).Cells(i, 3) = sFType '最終更新日 sLMod = Fx.DateLastModified ThisWorkbook.Sheets(1).Cells(i, 4) = sLMod i = i + 1 Next End Sub   あと、最後の"F列"にファイル名の画像を貼付けたいのですが どのようにしたら良いのでしょうか? 教えてください。

  • Windows Server 2003 IIS環境で外部の画像ファイルを取得したい

    外部のサーバーにある画像ファイルをエクセルに表示するというプログラムをC#で組んでいます。 ローカルでは問題なく動くのですが、サーバーだと画像を貼り付ける処理のところでとまってしまいます。 【環境】 Windows Server 2003 IISインストール済み 言語:C# Apache2.2 【ソース】 Excel.Shapes shapes = Sheet1.Shapes; Excel.Shape shape = shapes.AddPicture( URL, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, x, y, w, h); ローカルにおいた画像を貼り付けることはできたので、権限の問題かと思いますが。。。。 何卒宜しくお願いします。

  • エクセルVBAについて教えてください。

    DSUMを使ってVBAで自動計算をさせたいのですがうまくいきません。  ・Sheetsデータにデータを置いていて、A1からU1610までデータが入ってます。  ・Sheets集計用は計算させるための(条件を入れる)シートで、A1からE列まで(選択する項目によって何行目になるかわかりません。)  ・mycountでE列のデータが入ってる行を出してます。  ・部屋タイプで1K~1LDKを選ぶとDSUMの式のタイプに1を入れたいのです。(1K~1LDKの場合はCells(1,3) 下記のように書いてみましたが上手くいきません。 どなたかご教授いただけると助かります。 mycount = "=COUNT(集計用!E2:E300)" Sheets("集計用").Cells(5, 7).Value = Range("g10") = " =DSUM(cells(データ!,1),1610,21),cells(データ!1,タイプ),cells(集計用!),cells(mycount,5))" '部屋タイプの選択 If Sheets("フォーム").Range("c30") = "1K~1LDK" then  タイプ = 3 ElseIf Sheets("フォーム").Range("c30") = "2K~2LDK" Then タイプ = 6 ElseIf Sheets("フォーム").Range("c30") = "3K~3LDK" Then  タイプ = 9 ElseIf Sheets("フォーム").Range("c30") = "4K~4LDK" Then タイプ = 12 Else Sheets("フォーム").Range("c30") = "その他" Then タイプ = 15 End If

  • C#でEXCEL オープンできない

    C#でEXCEL オープンできない C#でEXCELファイルをオープンするプログラムを作りました。 自分のPCでは問題なくオープンすることができましたが、 他のPCで動かすとエラーが出てしまいます。(画像参照) 何が足りないのでしょうか、どなたかご教授ください。 よろしくお願いいたします。 以下、EXCELをオープンするソース部分 ---- using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; namespace Testxxx { <中略> // ボタン押下時 private void btn_Click(object sender, EventArgs e) { // ファイル名作成 string sNewXls = Application.StartupPath + @"\TEST.xls"; // Excelをオープン Excel.Workbook oWBook = OpenExcel(sNewXls); } // エクセルオープン private Excel.Workbook OpenExcel(string strExFile) { Excel.Application oXls; Excel.Workbook oWBook; oXls = new Excel.Application(); // Excelファイルをオープンする oWBook = (Excel.Workbook)(oXls.Workbooks.Open(strExFile,Type.Missing,false,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing)); Excel.Worksheet oSheet; oSheet = (Excel.Worksheet)oWBook.Sheets[1]; oSheet.Unprotect("test99"); // 仮設定 oSheet.Cells[3, 12] = "10965"; oSheet.Cells[4, 12] = "102"; oSheet.Protect("test", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); oXls.Visible = true; // Excelのウィンドウを表示する // Excel終了 //oXls.Workbooks.Close(); //oXls.Quit(); //System.Runtime.InteropServices.Marshal.ReleaseComObject(oXls); return oWBook; } ----

  • Excelでセル上の画像を別のセルにコピーするには

    いつも楽しく勉強させていただいております。 つぎのような処理をしたいのですが、うまくいきません。 1.セル1の上にある画像をセル2の上にコピーする。 2.コピーした画像をセル2の高さと幅にフィットさせる。 まず、このようなマクロを考えてみました。 Range("A1").CopyPicture Range("C1").Select ActiveSheet.Paste ActiveSheet.Shapes(Selection.Name).LockAspectRatio = msoFalse ActiveSheet.Shapes(Selection.Name).Top = Range("C1").Top ActiveSheet.Shapes(Selection.Name).Left = Range("C1").Left ActiveSheet.Shapes(Selection.Name).Height = Range("C1").Height ActiveSheet.Shapes(Selection.Name).Width = Range("C1").Width これですと元の画像がA1のセルより小さい場合、周囲に余白がある形でコピーされてしまいます。 C1にコピーしたら余白はなしでC1の大きさいっぱいに画像を引き延ばしたい(あるいは縮小したい)のです。 そこで次のように変更してみました。 (上のプログラムと一番上の行のみが違います)。 ActiveSheet.Shapes("図 6").Copy Range("C1").Select ActiveSheet.Paste ActiveSheet.Shapes(Selection.Name).LockAspectRatio = msoFalse ActiveSheet.Shapes(Selection.Name).Top = Range("C1").Top ActiveSheet.Shapes(Selection.Name).Left = Range("C1").Left ActiveSheet.Shapes(Selection.Name).Height = Range("C1").Height ActiveSheet.Shapes(Selection.Name).Width = Range("C1").Width これもうまくいきません。 A1にある元の"図 6"は動かしたくないのに、勝手にB1の位置に移動してしまいます。 というのは、"図 6"という画像をコピーすると、同じ名前で画像ができちゃうんですね。 コピー元とコピー先の両方の画像に対して位置や高さを設定することになるようです。 ということで、 1.セル1の上にある画像をセル2の上にコピーする。 2.コピーした画像をセル2の高さと幅にフィットさせる。 これを実現させるにはどうしたらいいでしょう。

  • エクセルに画像挿入

    以前の投稿で下記のようなVBAを拝見しました。 実行するとA列に画像ファイル名、B列に画像が縦に配置されます。 これを横に配置するにはどうすればいいのでしょうか? 初心者なので質問不足かもしれませんがよろしくお願いします。 Sub PictAdd() Dim pict As Shape, r As Range With Application.FileSearch  .NewSearch  .LookIn = ThisWorkbook.Path  .SearchSubFolders = False  .Filename = "*.jpg"  If .Execute() > 0 Then   For i = 1 To .FoundFiles.Count    Set r = ActiveSheet.Range("B" & i)    Set pict = ActiveSheet.Shapes.AddPicture _       (.FoundFiles(i), msoTrue, msoFalse, _        r.Left, r.Top, r.Width, r.Height)       pict.OnAction = "PictClick"       r.Offset(0, -1).Value = Dir(.FoundFiles(i))   Next i  End If End With  Columns(1).EntireColumn.AutoFit End Sub

  • エクセルでサイズ名の一覧を出したい

    現在、下記のコードでフォルダ内のデータベースを作成しています。 これに、『ファイルのサイズ』を加えたいのですが、何処に何を入れれば良いかがよくわかりません。 どなたか回答出来る方がいらっしゃれば、宜しくお願いします。 《現在使用しているコード》 Sub MakeFileList() Target = InputBox("ディレクトリ名を入力", "ディレクトリの指定", "C:\Windows") Set FS = CreateObject("Scripting.FileSystemObject") Set Fol = FS.GetFolder(Target) Set Fil = Fol.Files ThisWorkbook.Sheets("一覧").UsedRange.Delete '見出しを付ける ThisWorkbook.Sheets(1).Range("B2") = "ファイル名" ThisWorkbook.Sheets(1).Range("C2") = "ファイル種別" ThisWorkbook.Sheets(1).Range("D2") = "最終更新日" ThisWorkbook.Sheets(1).Range("E2") = "説明" ThisWorkbook.Sheets(1).Range("B2:E2").Interior.Color = RGB(0, 0, 0) ThisWorkbook.Sheets(1).Range("B2:E2").Font.Color = RGB(255, 255, 255) ThisWorkbook.Sheets(1).Range("B2:Es2").HorizontalAlignment = xlCenter i = 3 For Each Fx In Fil 'ファイル名 sFile = Fx.Name 'ファイル名の書き出し ThisWorkbook.Sheets(1).Cells(i, 2) = sFile 'ファイル種別 sFType = Fx.Type '最終更新日時の書き出し ThisWorkbook.Sheets(1).Cells(i, 3) = sFType '最終更新日 sLMod = Fx.DateLastModified ThisWorkbook.Sheets(1).Cells(i, 4) = sLMod i = i + 1 Next End Sub

専門家に質問してみよう