none
Exception from HRESULT: 0x800A03EC al guardar un archivo RRS feed

  • Pregunta

  • ¡¡Hola!!

    Tengo una aplicación que automatiza Excel desde VB.net. Mi problema es el título del post. No estoy haciendo NADA en el archivo, solo guardándolo (es ahí donde se cae).

    Lo extraño es que sí sirve y hace todo bien... excepto cuando el código de guardar está "afuera". Me explico:

    1. Este es el código que crea una aplicación

     

     Public Sub New(ByVal nombre As String)
      'Se guarda la cultura anterior
      Dim culturaAnterior As System.Globalization.CultureInfo = _
       System.Threading.Thread.CurrentThread.CurrentCulture
    
      'Se crea una cultura estandar (en-US) inglés estados unidos
      System.Threading.Thread.CurrentThread.CurrentCulture = _
       System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
    
      'Se inicializan las variables
      xlApp = New ApplicationClass
      xlLibro = xlApp.Workbooks.Add()
      xlHoja = xlLibro.Sheets(1)
    
      'Se aplica un tema y se inicializan las variables de formato
      xlLibro.ApplyTheme("C:\ReportesSLA.thmx")
      inicializarVariables()
      Try
       xlLibro.SaveAs("C:\Documents and Settings\blabla\" + nombre + ".xlsx")
      Catch ex As System.Runtime.InteropServices.COMException
       Console.WriteLine(ex.Message)
       MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
      End Try
    
    
     End Sub
    

     

    Y este es el código que la llama

     

     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGenerateList.Click
      Dim x As Excel
      x = New Excel("NOMBRE")
      x.cerrarDoc()
     End Sub
    

     

    De esta manera funciona. PERO si saco la parte de "guardar"

     

     Public Sub guardar(ByVal nombre As String)
      'Se guarda el libro
      Try
       xlLibro.SaveAs("C:\Documents and Settings\blabla\" + nombre + ".xlsx")
      Catch ex As System.Runtime.InteropServices.COMException
       Console.WriteLine(ex.Message)
       MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
      End Try
     End Sub
    

     

    Y comento el código en NEW (noten que es el mismo), y cambio el código que llama a esta función

     

     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGenerateList.Click
      Dim x As Excel
      x = New Excel("name8")
      x.guardar("name8")
      x.cerrarDoc()
     End Sub
    

     

    Ya no funciona :S... ¡¡¡Y es el mismo código!!!

    Otra cosa es que de la primera manera, funciona siempre y cuando no haya un archivo con el mismo nombre... O sea, no lo sobrescribe en caso de que exista. ¿Cómo lo hago? Y, ¿por qué el código estará fallando?

     

    Gracias

    viernes, 28 de mayo de 2010 17:59

Respuestas

  • Algo muy extraño, se solucionó cambiando el SaveAs por 

    xlLibro.SaveAs("C:\Documents and Settings\blabla\" + nombre, _
    
                  XlFileFormat.xlOpenXMLWorkbook, , , , , XlSaveAsAccessMode.xlNoChange, , , , , )


    Por un lado, y agregando el
    xlApp.DisplayAlerts = False
    por otro, al inicio de la creación de la aplicación.

    Saludos.
    • Marcado como respuesta Óscar viernes, 28 de mayo de 2010 20:14
    viernes, 28 de mayo de 2010 20:14