none
Colocar una talba en lugar especifico RRS feed

  • Pregunta

  • Buenas Tardes tengo un pequeño probema estoy haciendo un reporte en C# pero quiero que mi tabla ocupe cierto lugar dentro del documeno ya he buscado la solucion pero no encuentro como si alguien puediera ayudarme se lo agradeceria estoy sacando la tabala de un DataGridView

    .

    empezando lo que me hace el codigo es lo siguiente:

      * me inserta primero la tabla y despues la imagen y despues el texto

    La tabla me la coloca en la parte superior y quisiera que se pudiera insertar como en la siguiente imagen:

     * Y lo que quisiera es que me pusiera la imagen primero

     * despues el texto que reemplaza de mi plantilla

     * Y por ultimo la tabla

    este es el codigo que estoy usando:

    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.Word;
    using Microsoft.Office.Core;
    using System.Reflection;
    using Word = Microsoft.Office.Interop.Word;
    using System.IO;
    using System.Diagnostics;
    using System.Drawing.Drawing2D;

    namespace ReportesMontero
    {
        public partial class crearword : Form
        {
            public crearword()
            {
                InitializeComponent();
            }

            private void crearword_Load(object sender, EventArgs e)
            {
                Conexion conecta = new Conexion();
                conecta.consulta2("select * from facturas", "facturas");
                this.dataGridView1.DataSource = conecta.data.Tables["facturas"];
                dataGridView1.AllowUserToAddRows = false;

            }

            private void FindAndReplace(Microsoft.Office.Interop.Word.Application wordApp, object findText, object replaceWithText)
            {
                object MatchCase = true;
                object matchWholeWord = true;
                object matchWildCards = false;
                object matchSoundLike = false;
                object nmatchAllForms = false;
                object forward = true;
                object format = false;
                object matchKashida = false;
                object matchDiactitics = false;
                object matchAlefHamza = false;
                object matchControl = false;
                object read_only = false;
                object visible = true;
                object replace = 2;
                object wrap = 1;

                wordApp.Selection.Find.Execute(ref findText,
                            ref MatchCase,
                            ref matchWholeWord,
                            ref matchWildCards,
                            ref matchSoundLike,
                            ref nmatchAllForms,
                            ref forward,
                            ref wrap,
                            ref format,
                            ref replaceWithText,
                            ref replace,
                            ref matchKashida,
                            ref matchDiactitics,
                            ref matchAlefHamza,
                            ref matchControl);
            }



            string pathImage = null;
            //Metodo Para Crear el Documento
            private void CreateWordDocument(object filename, object savaAs, object image)
            {

                List<int> esperandoproceso = getRunningProcesses();
                object missing = Missing.Value;
                string tempPath = null;

                Word.Application wordApp = new Word.Application();

                Word.Document aDoc = null;

                if (File.Exists((string)filename))
                {
                    DateTime today = DateTime.Now;

                    object readOnly = false; //default
                    object isVisible = false;

                    wordApp.Visible = false;

                    aDoc = wordApp.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 missing,
                                                ref missing, ref missing, ref missing, ref missing);

                    aDoc.Activate();

                    //Find and replace:
                    this.FindAndReplace(wordApp, "<rfc>", txtrfc.Text);
                    this.FindAndReplace(wordApp, "<clientes>", txtcliente.Text);
                    this.FindAndReplace(wordApp, "<obra>", txtobra.Text);
                    this.FindAndReplace(wordApp, "<industria>", txtindustria.Text);
                    this.FindAndReplace(wordApp, "<Date>", DateTime.Now.ToShortDateString());
                    this.FindAndReplace(wordApp, "<subtotal>", txtsubtotal.Text);
                    this.FindAndReplace(wordApp, "<ivatotal>", txttotaliva.Text);
                    this.FindAndReplace(wordApp, "<total>", txttotal.Text);

                    //insert the picture:
                    Image img = resizeImage(pathImage, new Size(200, 90));
                    tempPath = System.Windows.Forms.Application.StartupPath + "\\Images\\~Temp\\temp.jpg";
                    img.Save(tempPath);

                    Object oMissed = aDoc.Paragraphs[1].Range; //the position you want to insert
                    Object oLinkToFile = false;  //default
                    Object oSaveWithDocument = true;//default
                    aDoc.InlineShapes.AddPicture(tempPath, ref oLinkToFile, ref oSaveWithDocument, ref oMissed);
                    // insertar datagriwd

                    DataGridView DGV = new DataGridView();
                    DGV = dataGridView1;
                    
                   
                    if (DGV.Rows.Count != 0)
                    {
                       
                        
                        int RowCount = DGV.Rows.Count;
                        int ColumnCount = DGV.Columns.Count;
                        Object[,] DataArray = new object[RowCount + 1, ColumnCount + 1];
                      
                        //add rows
                        int r = 0;
                        for (int c = 0; c <= ColumnCount - 1; c++)
                        {
                            for (r = 0; r <= RowCount - 1; r++)
                            {
                                DataArray[r, c] = DGV.Rows[r].Cells[c].Value;
                            } //end row loop
                        } //end column loop


                        


                        //page orintation
                       // aDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape; // selecciona la horientacion de la hoja vertical u Horizontal


                        dynamic oRange = aDoc.Content.Application.Selection.Range;
                        string oTemp = "";
                        for (r = 0; r <= RowCount - 1; r++)
                        {
                            for (int c = 0; c <= ColumnCount - 1; c++)
                            {
                                oTemp = oTemp + DataArray[r, c] + "\t";

                            }
                        }

                        //table format
                        oRange.Text = oTemp;
                        
                        object Separator = Word.WdTableFieldSeparator.wdSeparateByTabs;
                        object ApplyBorders = true;
                        object AutoFit = true;
                        object AutoFitBehavior = Word.WdAutoFitBehavior.wdAutoFitContent;
                        


                        oRange.ConvertToTable(ref Separator, ref RowCount, ref ColumnCount,
                                              Type.Missing, Type.Missing, ref ApplyBorders,
                                              Type.Missing, Type.Missing, Type.Missing,
                                              Type.Missing, Type.Missing, Type.Missing,
                                              Type.Missing, ref AutoFit, ref AutoFitBehavior, Type.Missing);

                        oRange.Select();

                        
                        aDoc.Application.Selection.Tables[1].Select();
                        aDoc.Application.Selection.Tables[1].Select();
                        aDoc.Application.Selection.Tables[1].Rows.AllowBreakAcrossPages = 0;
                        aDoc.Application.Selection.Tables[1].Rows.Alignment = 0;
                        aDoc.Application.Selection.Tables[1].Rows[1].Select();
                        aDoc.Application.Selection.InsertRowsAbove(1);
                        aDoc.Application.Selection.Tables[1].Rows[1].Select();

                        //header row style
                        aDoc.Application.Selection.Tables[1].Rows[1].Range.Bold = 1;
                        aDoc.Application.Selection.Tables[1].Rows[1].Range.Font.Name = "Calibri (Cuerpo)";
                        aDoc.Application.Selection.Tables[1].Rows[1].Range.Font.Size = 12;

                        //add header row manually
                        for (int c = 0; c <= ColumnCount - 1; c++)
                        {
                            aDoc.Application.Selection.Tables[1].Cell(1, c + 1).Range.Text = DGV.Columns[c].HeaderText;
                        }

                        //table style 
                        //oDoc.Application.Selection.Tables[1].set_Style("Grid Table 4 - Accent 5");
                        aDoc.Application.Selection.Tables[1].Rows[1].Select();
                        aDoc.Application.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;

                        //header text
                        /*
                        foreach (Word.Section section in aDoc.Application.ActiveDocument.Sections)
                        {
                            Word.Range headerRange = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
                            headerRange.Fields.Add(headerRange, Word.WdFieldType.wdFieldPage);
                            headerRange.Text = "your header text";
                            headerRange.Font.Size = 16;
                            headerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                        }
                        */
                    }

                    #region Print Document :
                    /*object copies = "1";
                    object pages = "1";
                    object range = Word.WdPrintOutRange.wdPrintCurrentPage;
                    object items = Word.WdPrintOutItem.wdPrintDocumentContent;
                    object pageType = Word.WdPrintOutPages.wdPrintAllPages;
                    object oTrue = true;
                    object oFalse = false;

                    Word.Document document = aDoc;
                    object nullobj = Missing.Value;
                    int dialogResult = wordApp.Dialogs[Microsoft.Office.Interop.Word.WdWordDialog.wdDialogFilePrint].Show(ref nullobj);
                    wordApp.Visible = false;
                    if (dialogResult == 1)
                    {
                        document.PrintOut(
                        ref oTrue, ref oFalse, ref range, ref missing, ref missing, ref missing,
                        ref items, ref copies, ref pages, ref pageType, ref oFalse, ref oTrue,
                        ref missing, ref oFalse, ref missing, ref missing, ref missing, ref missing);
                    }
                    */
                    #endregion

                }
                else
                {
                    MessageBox.Show("file dose not exist.");
                    return;
                }

                //Save as: filename
                aDoc.SaveAs2(ref savaAs, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing);

                //Close Document:


                //aDoc.Close(ref missing, ref missing, ref missing);
                File.Delete(tempPath);

                MessageBox.Show("File created.");
                List<int> procesoabsorvido = getRunningProcesses();
                killProcesses(esperandoproceso, procesoabsorvido);

            }


            public List<int> getRunningProcesses()
            {
                List<int> ProcessIDs = new List<int>();
                //here we're going to get a list of all running processes on
                //the computer
                foreach (Process clsProcess in Process.GetProcesses())
                {
                    if (Process.GetCurrentProcess().Id == clsProcess.Id)
                        continue;
                    if (clsProcess.ProcessName.Contains("WINWORD"))
                    {
                        ProcessIDs.Add(clsProcess.Id);
                    }
                }
                return ProcessIDs;
            }


            private void killProcesses(List<int> processesbeforegen, List<int> processesaftergen)
            {
                foreach (int pidafter in processesaftergen)
                {
                    bool processfound = false;
                    foreach (int pidbefore in processesbeforegen)
                    {
                        if (pidafter == pidbefore)
                        {
                            processfound = true;
                        }
                    }

                    if (processfound == false)
                    {
                        Process clsProcess = Process.GetProcessById(pidafter);
                        clsProcess.Kill();
                    }
                }
            }


            //Méthode Enabled Controles:
            private void tEnabled(bool state)
            {
                txtrfc.Enabled = state;
                txtcliente.Enabled = state;
                txtobra.Enabled = state;
                txtindustria.Enabled = state;
                btncargarlogo.Enabled = state;
            }

            //Change Picture Size :
            private static Image resizeImage(string filename, Size size)
            {
                Image imgToResize = Image.FromFile(filename);
                int sourceWidth = imgToResize.Width;
                int sourceHeight = imgToResize.Height;

                float nPercent = 0;
                float nPercentW = 0;
                float nPercentH = 0;

                nPercentW = ((float)size.Width / (float)sourceWidth);
                nPercentH = ((float)size.Height / (float)sourceHeight);

                if (nPercentH < nPercentW)
                    nPercent = nPercentH;
                else
                    nPercent = nPercentW;

                int destWidth = (int)(sourceWidth * nPercent);
                int destHeight = (int)(sourceHeight * nPercent);

                Bitmap b = new Bitmap(destWidth, destHeight);
                Graphics g = Graphics.FromImage((Image)b);
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;

                g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
                g.Dispose();

                return (Image)b;
            }
          
            private void btncargarlogo_Click(object sender, EventArgs e)
            {
                if (LoadPic.ShowDialog() == DialogResult.OK)
                {
                    pathImage = LoadPic.FileName;
                    btncreardoc.Enabled = true;
                }
            }



            //Crear documento
            private void btncreardoc_Click(object sender, EventArgs e)
            {

                string FileName = txtarchivo.Text;

                if (SaveDoc.ShowDialog() == DialogResult.OK)
                {


                    CreateWordDocument(txtarchivo.Text, SaveDoc.FileName, pathImage);
                    tEnabled(false);
                    //printDocument1.DocumentName = SaveDoc.FileName;

                }


            }
            //Cargar Plantilla
            private void button1_Click_1(object sender, EventArgs e)
            {
                if (LoadDoc.ShowDialog() == DialogResult.OK)
                {
                    txtarchivo.Text = LoadDoc.FileName;
                    tEnabled(true);
                }
            }

            private void Total_Click(object sender, EventArgs e)
            {
                // suma celdas para el total venta

                double total = 0;// suma total de las celdas
                float resultado = 0;// subtotal
                float resultado2 = 0;// total



                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    total += Convert.ToDouble(row.Cells["total"].Value);
                }

                txtsubtotal.Text = Convert.ToString(total);

                // resultado iva
                resultado = float.Parse(txtsubtotal.Text) / 16;
                txttotaliva.Text = resultado.ToString();
                // resultadototal
                resultado2 = float.Parse(txttotaliva.Text) + float.Parse(txtsubtotal.Text);
                txttotal.Text = resultado2.ToString();




            }
        }
    }

    lunes, 11 de diciembre de 2017 21:33