C# Word Zwischenablage

derdackel

Grünschnabel
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?
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);



        }
    }
}
 

Neue Beiträge

Zurück