[ Foro de C# ]

Exportar a excel

27-Jul-2014 17:05
Marcos Paredes
4 Respuestas

Buenas tardes,

estoy aprendiendo c# a modo autodidacta. Soy muy novato aún, pero estoy intentado hacer una especie de convertidor.
Se trata de importar un archivo excel datetable, que se muestra en un datagrid(esto ya lo he conseguido), y volver a exportarlo a excel (también se hacerlo, pero no como quiero).
Lo que quiero es exportar los datos, pero no en el mismo orden, ni todas. Quiero celdas determinadas.
Dejo un ejemplo:
Tengo una hoja con 3000 de estas lineas:


A1             B1               C1               D1
valor1     valor2       valor3       valor4


y quiero esto:


A1             B1               C1              D1
valor3                       valor1
valor2


Toda sugerencia se agradece,
muchas gracias


31-Jul-2014 15:12
Nacho Cabanes (+84)

La sugerencia es que si eres novato no hagas cosas tan rebuscadas...  ;-)

(Lo siento, no he trabajado con hojas de cálculo desde programa, no puedo ayudarte; sólo decirte que debe existir alguna forma de iterar por los datos para guardar sólo los que necesites)


01-Aug-2014 01:06
Marcos Paredes

Buenas noches.
Gracias por contestar. La verdad que siempre he querido aprender a programar, desde que tenia el sinclair spectrum 128 ya copiaba códigos de basic de revistas, pero antes no estaba google como ahora, y aprender resultaba muy difícil.
Me he tirado un poco a la piscina, porque mi trabajo es contable y el convertidor me puede ahorrar unas 3000 facturas al mes.  Además me supone aprender y un gran reto.

Tengo el código muy avanzado, pensaba que me atascaria en algún punto y lo abandonaría, pero la verdad que todos los problemas que me están surgiendo increíblemente los estoy solucionando, aunque hay algunos detalles que no se como hacer y los dejo para el final. Cuando llegue el momento es posible que recurra de nuevo al foro.
Agradecerle las molestias que se toma en enseñar y explicar, muchas gracia s


04-Aug-2014 14:14
Invitado (Caranim)

Te adjunto un ejemplo muy básico.
Tienes que añadir la referencia: Microsoft.office.interop.Excel y al ejecutar debería de generar un libro Excel con los valores del array.


using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Unos valores de muestra para rellenar
            string [,]sArray;
            sArray = new string[5, 3];
            sArray[0, 0] = "Celda 0-0";
            sArray[0, 1] = "Celda 0-1";
            sArray[0, 2] = "Celda 0-2";
            sArray[1, 0] = "Celda 1-0";
            sArray[1, 1] = "Celda 1-1";
            sArray[1, 2] = "Celda 1-2";
            sArray[2, 0] = "Celda 2-0";
            sArray[2, 1] = "Celda 2-1";
            sArray[2, 2] = "Celda 2-2";
            sArray[3, 0] = "Celda 3-0";
            sArray[3, 1] = "Celda 3-1";
            sArray[3, 2] = "Celda 3-2";
            sArray[4, 0] = "Celda 4-0";
            sArray[4, 1] = "Celda 4-1";
            sArray[4, 2] = "Celda 4-2";
            // Crear los objetos necesarios para trabajar con Exce.
            Microsoft.Office.Interop.Excel.Application obj_Excel;  
            Microsoft.Office.Interop.Excel.Workbook libroexcel;            
            Microsoft.Office.Interop.Excel.Worksheet hojaexcel;
            object misValue = System.Reflection.Missing.Value;
            obj_Excel = new Microsoft.Office.Interop.Excel.Application();
            libroexcel = obj_Excel.Workbooks.Add(misValue);
            hojaexcel = (Microsoft.Office.Interop.Excel.Worksheet)libroexcel.Worksheets.get_Item(1);
                      
            obj_Excel.Visible = false; // Permite ver o no la hoja en pantalla mientras el programa trabaja con ella.

            for (int f = 1; f < 6; f++)
            {
                for (int n = 1; n < 4; n++)
                {
                    hojaexcel.Cells[f,n] = sArray[f-1,n-1];
                }
            }
          
            libroexcel.SaveAs("Libroexcel.xls");
            libroexcel.Close();
           
        }
    }
}


Espero qué te pueda ayudar.


05-Aug-2014 02:31
Marcos Paredes

Muchas gracias,

ya lo tengo terminado, practicamente. Es muy parecido a lo que has posteado, solo que yo en el for en vez de usar los valores < 6 y <4, he usado grd.Rows[f].Cells[n].Value.ToString(); y los he ido posicionando con hojaexcel.Cells[posicion1, posicion2].
Mas o menos así:


miarray[i] =  grd.Rows[f].Cells[2].Value.ToString()
hojaexcel.Cells[f + posicion1, posicion2] = miarray[i]
f++


En cualquier caso, muchas gracias






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)