Hi,
ich schreibe aktuell ein Programm zum erstellen von Zertifikaten. Das Programm soll so ablaufen:
Es gibt eine Vorlagendatei (Word) und eine Datenbankdatei (Excel).
In eine neue Datei soll die Vorlage so oft reinkopiert werden (ein zertifikat pro seite), wie es Datensätze gibt, anschließend werden Platzhalter durch die Teilnehmerinfos ersetzt.
Mit meinem aktuellen Ablauf wird die Formatierung der Vorlage nicht übernommen. Kann ich das auch irgendwie anders gestalten?
ich schreibe aktuell ein Programm zum erstellen von Zertifikaten. Das Programm soll so ablaufen:
Es gibt eine Vorlagendatei (Word) und eine Datenbankdatei (Excel).
In eine neue Datei soll die Vorlage so oft reinkopiert werden (ein zertifikat pro seite), wie es Datensätze gibt, anschließend werden Platzhalter durch die Teilnehmerinfos ersetzt.
Mit meinem aktuellen Ablauf wird die Formatierung der Vorlage nicht übernommen. Kann ich das auch irgendwie anders gestalten?
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Word;
using System.Reflection;
namespace WindowsFormsApplication1
{
public partial class SetVariables : Form
{
public SetVariables(String vorlage, String db, object tabellenblatt)
{
InitializeComponent();
#region Excel
Microsoft.Office.Interop.Excel.Application excel = null; // Excel wird vorbereitet
Workbook wb = null; // Workbook wird angelegt
try
{
// Excel starten
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.Visible = false;
// Datei öffnen
wb = excel.Workbooks.Open(db, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
//Arbeitsblätter auslesen
Sheets sheets = wb.Worksheets;
// Arbeitsblatt auswählen
Worksheet ws = (Worksheet)sheets.get_Item(tabellenblatt);
// Spalten und Zeilen zählen
Boolean check_empty_colls = false;
Boolean check_empty_rows = false;
Char alpha = 'A';
int i = 1;
String current_cell = "Platzhalter";
int count_rows = 0; // Anzahl der Zeilen
Microsoft.Office.Interop.Excel.Range zellen;
while (check_empty_rows == false)
{
zellen = (Microsoft.Office.Interop.Excel.Range)ws.get_Range("A" + i, "A" + i);
try
{
current_cell = zellen.Value2.ToString();
}
catch
{
current_cell = "";
}
i++;
if (current_cell == "") { check_empty_rows = true; } else { count_rows++; }
}
// Array anlegen
String[] table_content = new String[count_rows];
check_empty_rows = false;
i = 1;
int i_array = 0;
alpha = 'A';
current_cell = "Platzhalter";
// Array füllen
while(check_empty_colls == false)
{
try
{
zellen = (Microsoft.Office.Interop.Excel.Range)ws.get_Range("" + alpha + i, "" + alpha + i);
current_cell = zellen.Value2.ToString();
if (lb_current.Text == "")
{
lb_current.Text += zellen.Value2.ToString();
}
else
{
lb_current.Text += ";" + zellen.Value2.ToString();
}
alpha++;
}
catch
{
i++; alpha = 'A'; current_cell = ""; table_content[i_array] = lb_current.Text; lb_current.Text = ""; i_array++;
if (table_content[table_content.Length - 1] != null) { check_empty_colls = true; Excel(table_content, vorlage); }
}
}
}
finally
{
// Excel wird ohne Änderungen geschlossen
wb.Close(false, null, null);
excel.Quit();
}
#endregion
}
public void Excel(String[] data_array, String vorlage){
// Word öffnen
object readOnly = false;
object isVisible = false;
object missing = System.Reflection.Missing.Value;
object fileName = vorlage;
Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass();
Document WordDoc = word.Documents.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing);
word.Visible = false;
WordDoc.Activate();
WordDoc.Select(); // Text markieren
object text = WordDoc;
System.Windows.Forms.Clipboard.SetDataObject(text, true);
word.Quit(ref missing, ref missing, ref missing);
// --- //
String[] variablen = data_array[0].Split(";".ToCharArray());
object fileName2 = @"D:\Visual Studio 2008\Projects\CertificateManager\CertificateManager\WindowsFormsApplication1\bin\Debug\print.doc";
word = new Microsoft.Office.Interop.Word.ApplicationClass();
WordDoc = word.Documents.Open(ref fileName2, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing);
word.Visible = true;
WordDoc.Activate();
IDataObject iData = Clipboard.GetDataObject();
object start = 0;
object end = 0;
Microsoft.Office.Interop.Word.Range insert = WordDoc.Range(ref start, ref end);
insert.Text = Convert.ToString(iData.GetData(System.Windows.Forms.DataFormats.StringFormat));
// word.Quit(ref missing, ref missing, ref missing);
}
}
}