none
Cambiar tipo a un archivo Excel con VB RRS feed

  • Pregunta

  • Hola a tod@s, hace mucho que no andaba por aquí, bueno la pregunta es simple, pero no sé si la respuesta lo sea:

    tengo una aplicación que abre un archivo excel y lo modifica, le quita filas y luego lo cierra; aquí les dejo parte del código para que se familiarisen un poco, esta es la función que recorta las 6 primeras filas del archivo, que trae basura que no me sirve, ya que de la fila 7 comienza el encabezado del informe que necesito:

        Private Sub Corta()
            'En Label uno guardé la ruta del archivo con un OpenFileDialog
            Dim HOJA As String = Label1.Text.ToLower
            Dim oExcel As Excel.ApplicationClass
            Dim oBooks As Excel.Workbooks
            Dim oBook As Excel.WorkbookClass
            Dim oSheet As Excel.Worksheet
    
            ' Inicia Excel y abre el workbook
            oExcel = CreateObject("Excel.Application")
            oExcel.Visible = False
            oBooks = oExcel.Workbooks
            oBook = oBooks.Open(HOJA)
            oSheet = oBook.Sheets(1)
    
            If oSheet.Cells(1, 1).value <> "NºGMM" Then
                oSheet.Rows("1:6").Delete()
            End If
    
            ' Cierra todo
            oBook.Close(True)
            System.Runtime.InteropServices.Marshal. _
                ReleaseComObject(oBook)
            oBook = Nothing
    
            System.Runtime.InteropServices.Marshal. _
                ReleaseComObject(oBooks)
            oBooks = Nothing
    
            oExcel.Quit()
            System.Runtime.InteropServices.Marshal. _
                ReleaseComObject(oExcel)
            oExcel = Nothing
        End Sub

    Básicamente el problema es el siguiente: el archivo excel lo genera otra aplicación, y a pesar de que la extención del mismo es xls, este es un archivo delimitado por tabulaciones .txt, en la imagen queda más claro, y en otras ocaciones es bajado desde asp.net por lo que es un archivo .xls de tipo html(página web)

    La idea sería que cuando abriera el archivo para cortarlo pudiese cambiarle el tipo a .xls, y así poder leerlo a posterior sin problemas a través de un OleDb.OleDbConnection


    Bueno ese es mi problema existencial, espero puedan darme una manito.

    Saludos,

    Mauricio Acuña.




    martes, 4 de diciembre de 2012 13:39

Respuestas

  • Buenas,

    Al tener el objeto oexcel (como un Excel.ApplicationClass)

    puedes hacer perfectamente un saveas, es decir, el mismo objeto dispone de la funcion para guardar en el formato que quieras

    Creo que la funcion era algo asi: oexcel.saveas(fichero,tipo)

    Saludos.

    • Marcado como respuesta Phantom_Lord84 martes, 4 de diciembre de 2012 19:20
    martes, 4 de diciembre de 2012 18:23

Todas las respuestas

  • Buenas,

    Al tener el objeto oexcel (como un Excel.ApplicationClass)

    puedes hacer perfectamente un saveas, es decir, el mismo objeto dispone de la funcion para guardar en el formato que quieras

    Creo que la funcion era algo asi: oexcel.saveas(fichero,tipo)

    Saludos.

    • Marcado como respuesta Phantom_Lord84 martes, 4 de diciembre de 2012 19:20
    martes, 4 de diciembre de 2012 18:23
  • Muchas Gracias, tu respuesta me orientó mucho, finalmente agregé dos lineas:

    'que no muestre el mensaje de sobreescribir
    oExcel.DisplayAlerts = False
    'cambia el formato
    oExcel.ActiveWorkbook.SaveAs(Label1.Text.ToLower, -4143)

    Finalmente el código quedó así:

     Private Sub Corta()
            Dim HOJA As String = Label1.Text.ToLower
            Dim oExcel As Excel.ApplicationClass
            Dim oBooks As Excel.Workbooks
            Dim oBook As Excel.WorkbookClass
            Dim oSheet As Excel.Worksheet 
    
            ' Inicia Excel y abre el workbook
            oExcel = CreateObject("Excel.Application")
            oExcel.Visible = False
            oBooks = oExcel.Workbooks
            oBook = oBooks.Open(HOJA)
            oSheet = oBook.Sheets(1)
    
            If oSheet.Cells(1, 1).value <> "NºGMM" Then
                oSheet.Rows("1:6").Delete()
            End If
    
            oExcel.DisplayAlerts = False
            oExcel.ActiveWorkbook.SaveAs(Label1.Text.ToLower, -4143)
    
            ' Cierra todo
            oBook.Close(True)
            System.Runtime.InteropServices.Marshal. _
                ReleaseComObject(oBook)
            oBook = Nothing
    
            System.Runtime.InteropServices.Marshal. _
                ReleaseComObject(oBooks)
            oBooks = Nothing
    
            oExcel.Quit()
            System.Runtime.InteropServices.Marshal. _
                ReleaseComObject(oExcel)
            oExcel = Nothing 
        End Sub

    Muchas Gracias

    martes, 4 de diciembre de 2012 19:19