Mit Excel AddIn Bild in Arbeitsblatt einfügen

09/04/2009 - 10:29 von AndreasU | Report spam
Ich schreibe gerade ein Excel AddIn (erstmal für Excel2003). Ich habe ein
Form zum Bearbeiten des Excelsheets und binde folgende Namespaces ein:

using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using System.Runtime.InteropServices;

Mir stellt sich jetzt die Frage, wo der Unterschied zwischen Excel.Workbook
und Excel._Workbook ist.

Außerdem möchte ich ein Bild(tif) enfügen, welches ich in einen Stream von
den SQL Reporting Services bekomme, einfügen.

Ich bin soweit (in einer Form):

Excel.Application oExcelAppli;
Excel.Workbook oExcelWorkbook;
Excel.Worksheet oExcelWorkSheet;
Excel.Range oExcelRange;

InsertPic()
{
oExcelAppli = oExcelAppli2;
oExcelWorkbook = oExcelAppli.ActiveWorkbook;
oExcelWorkSheet = (Excel.Worksheet)oExcelWorkbook.ActiveSheet;
}

Ist das der falsche Weg? Wie bekomme ich jetzt das Bild in das aktive Sheet
an eine bestimmte Position?

Ich benutze VSTO2.0, C#, Excel2003 spàter auch Excel2007

Für Tips wàre ich dankbar.

Andreas Ulbricht


-
XXL-Pizza: Der Schnelle Weg zu Ihrer Pizza
http://www.xxl-pizza.de
 

Lesen sie die antworten

#1 Frank Dzaebel
13/04/2009 - 15:05 | Warnen spam
Hallo Andreas,

Mir stellt sich jetzt die Frage, wo der Unterschied zwischen
Excel.Workbook und Excel._Workbook ist.



"_Worksheet" ist ein Teil-Interface von "Worksheet".
Da folgende Beziehung zwischen beiden Interfaces besteht:

[Guid("000208D8-0000-0000-C000-000000000046")]
[CoClass(typeof(WorksheetClass))]
public interface Worksheet : _Worksheet, DocEvents_Event
{
}

kannst Du Dir ggf. schon ausrechnen, dass Du zum
Beispiel keine Events im "_Worksheet" Interface hast.
Also, dass dient "Kapselung".
__________



Außerdem möchte ich ein Bild(tif) enfügen, welches ich in einen
Stream von den SQL Reporting Services bekomme, einfügen.



... es hàngt von den Anforderungen ab -
in Zelle, In Zelle mit Originalgröße, in exakte
XY-Position/Originalgrösse. Hier mal ein Beispiel:

using System;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.Drawing;
using Microsoft.Office.Core;
using System.IO;
using System.Diagnostics;
using System.Windows.Forms;

namespace DeinExcelAddin
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Excel.Application app;
Excel.Workbooks books;
Excel.Sheets sheets;
Excel._Worksheet sheet;
Excel.Range range;
Excel.Shapes shapes;
try
{
app = this.Application;
books = app.Workbooks;
sheets = app.Worksheets;
if (sheets.Count < 1)
{
Debug.WriteLine("Kein Arbeitsblatt geöffnet");
return;
}
sheet = (Excel._Worksheet)sheets.get_Item(1);
shapes = sheet.Shapes;

// Mal ein Beispiel:
range = sheet.get_Range("B2", Missing.Value);
range.set_Value(Missing.Value, "Hallo, " + Environment.UserName +
"!");

string picPath =
Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
picPath = Path.Combine(picPath, "DeinBild.tif");
Image image = Image.FromFile(picPath); // bei Dir:
Image.FromStream(...)

shapes.AddPicture(picPath, MsoTriState.msoFalse,
MsoTriState.msoCTrue,
100f, 100f, (float)image.Width, (float)image.Height);

this.Application.Visible = true;
this.Application.UserControl = true;
}
catch (Exception exp)
{
// todo:
MessageBox.Show(exp.Message, "Fehler");
}
}

private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}

private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}

}
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen