Excel auf dem Client PC ansteuern und als Angebot Druckvorlage mit Daten füllen? Möglich? Wie?
















Hallo allerseits,


ich habe folgende Frage:


Ist es möglich Excel auf der jeweiligen Client Maschiene über "Regel anwenden" anzusteuern?


Den Code um das excel Client seitig zu erzeugen habe ich schon.


Die Frage ist nur kann ich Excel Problemlos über "Regel anwenden" von einem Angebot aus aufrufen und die korrespondierenden Daten übergeben?


Gibt es Methoden im der CrmService.cs die ein weitegeben von Daten an excel oder andere Programme unterstützt?


Hat jemand so etwas schon einmal gemacht? Oder einen Link für mich?


 


Ich bin für jede Hilfe dankbar


 


 


Ich arbeite mit Visual Studio 2005 und Microsoft Visual C# 2005


 


 


Der Code für den Excel Aufruf funktioniert soweit


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;


using System.Reflection;


using System.Text.RegularExpressions;



namespace CRM_EXCEL


{


class TestAufruf


{


public static void Main()


{


ExcelPrintOffer TestObject = new ExcelPrintOffer();


TestObject.SetUpOffer();


}


}


 


class ExcelPrintOffer


{


protected Excel.Application VarExcelAppplication;


protected Excel._Workbook VarExcelWorkbook;


protected Excel._Worksheet VarExcelSheet;


protected Excel.Range VarExcelRange;


// generate Offer Base Document


public ExcelPrintOffer ()


{


try


{


//Start Excel and get Application object.


VarExcelAppplication = new Excel.Application();


VarExcelAppplication.Visible = true;


//Open existing Workbook


//VarExcelWorkbook = (Excel._Workbook)(VarExcelAppplication.Workbooks.Open(VarExcelWorkbookPath, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing));



//Create a new workbook.


VarExcelWorkbook = (Excel._Workbook)(VarExcelAppplication.Workbooks.Add(Missing.Value));


//Set active Sheet of the Woorkbook as VarExcelSheet


VarExcelSheet = (Excel._Worksheet)VarExcelWorkbook.ActiveSheet;


}


catch (Exception theException)


{


String errorMessage;


errorMessage = "Error: ";


errorMessage = String.Concat(errorMessage, theException.Message);


errorMessage = String.Concat(errorMessage, " Line: ");


errorMessage = String.Concat(errorMessage, theException.Source);


MessageBox.Show(errorMessage, "Error");


}


}


 


protected void WriteStringToSheetCell(int VarExcelSheetZeileMethodenAufruf, int VarExcelSheetSpalteMethodenAufruf, string ZellenInhaltMethodenAufruf)


{


VarExcelSheet.Cells[VarExcelSheetZeileMethodenAufruf, VarExcelSheetSpalteMethodenAufruf] = ZellenInhaltMethodenAufruf;


}


//Set up the generell Layout of the offer


public void SetUpOffer()


{


WriteStringToSheetCell(1, 2, "Simi system offer");


VarExcelSheet.get_Range("B1", "B1").Font.Bold = true;


VarExcelSheet.get_Range("B1", "B1").HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;


VarExcelSheet.get_Range("B1", "B1").Font.Size = 14;


 


WriteStringToSheetCell(4, 2, "SIMI Reality Motion Systems GmbH / Postfach 1518 / 85705 Unterschleissheim / Germany");


VarExcelSheet.get_Range("B4", "B4").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;


 


//Array for the "A" vertical Column


string[] AColumnWordsVertical = { "Partner", "Contact", "Quotenumber", "Revisionsnummer", "Customer", "Adress", "Fon", "Fax", "Simi project offers"};


WriteArraysTopDownToOffer(AColumnWordsVertical, 1, 4);


//Format as bold, vertical alignment = center.


VarExcelSheet.get_Range("A4", "A12").Font.Bold = true;


VarExcelSheet.get_Range("A4", "A12").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;


//VarExcelSheet.get_Range("A4", "A12").Font.Background =;


 


//Array for the Row16 horizontal


string[] Row16WordsHorizontal = { "Simi software", "Description", "Amount", "Product", "Price" };


WriteArraysLeftRightToOffer(Row16WordsHorizontal, 16, 1);


//Format as bold, vertical alignment = center.


VarExcelSheet.get_Range("A16", "E16").Font.Bold = true;


VarExcelSheet.get_Range("A16", "E16").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;


//Array for the Row17 horizontal


string[] Row17WordsHorizontal = { "Simi hardware", "Description", "Amount", "Product", "Price" };


WriteArraysLeftRightToOffer(Row17WordsHorizontal, 17, 1);


//Format as bold, vertical alignment = center.


VarExcelSheet.get_Range("A17", "E16").Font.Bold = true;


VarExcelSheet.get_Range("A17", "E16").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;


 


//Array for the Row18 horizontal


string[] Row18WordsHorizontal = { "Simi project offers", "Description", "Amount", "Product", "Price" };


WriteArraysLeftRightToOffer(Row18WordsHorizontal, 18, 1);


//Format as bold, vertical alignment = center.


VarExcelSheet.get_Range("A18", "E16").Font.Bold = true;


VarExcelSheet.get_Range("A18", "E16").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;


 


//Array for the Row19 horizontal


string[] Row19WordsHorizontal = { "Simi service", "Description", "Amount", "Product", "Price" };


WriteArraysLeftRightToOffer(Row19WordsHorizontal, 19, 1);


//Format as bold, vertical alignment = center.


VarExcelSheet.get_Range("A19", "E16").Font.Bold = true;


VarExcelSheet.get_Range("A19", "E16").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;


 



 


//AutoFit columns


VarExcelRange = VarExcelSheet.get_Range("A1", "H1");


VarExcelRange.EntireColumn.AutoFit();


//Make sure Excel is visible and give the user control


//of Microsoft Excel's lifetime.


VarExcelAppplication.Visible = true;


VarExcelAppplication.UserControl = true;


}


//Writes stringarrays to the offer determined by array column and startingrow


private void WriteArraysTopDownToOffer(String[] ArrayToReadFrom, int ColumnToRunThrough, int RowToStartWritingTo)


{


int CurrentPositionInArray = 0;


int VarCurrentRow = RowToStartWritingTo;


String CallerString;


while (CurrentPositionInArray < ArrayToReadFrom.Length)


{


CallerString = ArrayToReadFrom[CurrentPositionInArray];


WriteStringToSheetCell(VarCurrentRow, ColumnToRunThrough, CallerString);


CurrentPositionInArray++;


VarCurrentRow++;


}


}


private void WriteArraysLeftRightToOffer(String[] ArrayToReadFrom, int RowToRunThrough, int ColumnToStartWritingTo)


{


int CurrentPositionInArray = 0;


int VarCurrentColumn = ColumnToStartWritingTo;


String CallerString;


while (CurrentPositionInArray < ArrayToReadFrom.Length)


{


CallerString = ArrayToReadFrom[CurrentPositionInArray];


WriteStringToSheetCell(RowToRunThrough, VarCurrentColumn, CallerString);


CurrentPositionInArray++;


VarCurrentColumn++;


}


}



 


}


 



}


 


Gruß


Rusha



Re: Excel auf dem Client PC ansteuern und als Angebot Druckvorlage mit Daten füllen? Möglich? Wie?

Hallo Rusha,


über "Regel anwenden" können nur serverseitige Programme ausgeführt werden. Theoretisch könnte man dort zwar über eine "Custom Assembly" dine Programm ausführen, allerdings ist der Code, so wie du ihn angegeben hast, serverseitig nicht supportet und auch nicht empfohlen. Schau dir hierzu mal den folgenden Artikel an:
http://msdn2.microsoft.com/en-us/library/h7eb01hx(vs.80).aspx


Zusätzlich kannst du derverseitig theoretisch auch über das neue Excel-Dokumentformat gehen, dass letztlich nur eine gezippte XML-Datei mit diversen anderen Dateien ist und über das XML-Objektmodell manipuliert werden kann.


Alternativ kannst du das Ganze auch clientseitig durchführen lassen, allerdings geht das dann nicht über "Regel anwenden", sondern beispielsweise über einen über die isv.config hinzugefügten Button, in dem du per JScript deinen Code ausführen lässt. Hierbei würde ich dir empfehlen, ein ActiveX-Objekt zu erstellen, dass dann auf dem Client registriert ist und per JScript genutzt wird.



AW: Re: Excel auf dem Client PC ansteuern und als Angebot Druckvorlage mit Daten füllen? Möglich? Wie?

Hallo Jürgen,

danke für die schnelle und kompetente Antwort.
Hatte es vorher in der englischsprachigen Newsgroup versucht und bin nicht weitergekommen.

Wenn ich dich richtig verstande habe würdest du von einer "Custom Assembly" abraten?
Mir wurde genau das von so gennanten "CRM Spezialisten" empfohlen.
Aber nach und nach stoße ich auf immer mehr Fakten die klar dagegen sprechen.

Was würdest du denn für einen Weg empfehlen um eine bearbeitbare Druckvorlage zu erstellen?
Ich kann mir nicht vorstellen, dass wir die einzige Firma sind die ihre Angebote auch "customized" drucken will. Irgendwer hat das doch bestimmt schon brauchbar gelöst.

Was ist für dieses Problem "state of the art" bzw. der schnellste und evtl. dokumentierteste Weg?


Vielen Dank im voraus für deine Zeit
Gruß
Rusha


AW: Re: Excel auf dem Client PC ansteuern und als Angebot Druckvorlage mit Daten füllen? Möglich? Wie?

Habe den Artikel gelesen. Der hat mich auf eine neue Idee gebracht.

Ein Kollege hatte schon eine Vorlage erstellt die mit Hilfe von MS Query die Daten aus der SQL Datenbank holt.
Wäre es möglich diese Vorlage auf dem Server zu deponieren.
Dann in CRM eine Custom Assemblie ablaufen lassen die einfach die Angebotsnummer reinschreibt (von der die bereits funktioniereneden Abfragen über MS Query abhängen).
Anschließend die Copy an den User schicken der es dann mit seinem eigenen Excel öffnet?

Wäre das ein brauchbarer ansatz? Oder schwer zu implementieren? Die Vorlage gäbe es ja schon ich müßte nur die relevante Angebotsnummer einfügen und das ganze an den derzeitigen CRM User schicken. Oder ihn eine Kopie davon öffnen lassen.

Oder is das ein schlechter Ansatz?


Re: AW: Re: Excel auf dem Client PC ansteuern und als Angebot Druckvorlage mit Daten füllen? Möglich? Wie?

Ok, das geht natürlich auch.


Wahrscheinlich ist es am zielführendsten das Ganze aus Excel heraus zu initiieren und dann lokal das ein Angebot erstellen zu lassen und dabei über ADO.NET auf die SQL Server-Datenbank (gefilterte Sichten) zugreifen.


Was denkst du?