Newsgroup: it.comp.lang.visual-basic
Titolo: Salvataggio file excel

Ciao,
 
ho una sub che mi esporta i dati di una DataGridView in Excel; funziona tutto ma non salva correttamente il file.
Dopo l'export apro il file e mi compare una maschera di windows con titolo "Download file" nella quale mi chiede se aprire o salvare il file, salvataggio che dovrebbe essere già eseguito dal codice..
Inoltre anche quando spengo il PC chiede se salvare il file excel!!
 
inserisco la parte finale del codice di esportazione mi sa che il problema è li:
 
wSheet.Columns.AutoFit()
        Dim strFileName As String = "C:\Tabella.xlsx"
        Dim blnFileOpen As Boolean = False
        Try
            Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(strFileName)
            fileTemp.Close()
        Catch ex As Exception
            blnFileOpen = False
        End Try
 
        If System.IO.File.Exists(strFileName) Then
            System.IO.File.Delete(strFileName)
        End If
 
        wBook.SaveAs(strFileName)
        excel.Workbooks.Open(strFileName)
        excel.Visible = False
        excel.Quit()
 
Il file Tabella.xlsx è comunque presente in C:\
grazie

Il giorno venerdì 13 luglio 2012 09:30:17 UTC+2, Marco75 ha scritto:
 
L'apertura dello stream a che serve, a testare se hai i diritti di scrittura?
Se è così, tanto vale eliminarlo e mettere il Try..Catch sul .SaveAs(), visto che comunque va controllato e potrebbe fallire per altri motivi.
 
Soprattutto però, il problema dovrebbe essere nelle ultime 3 righe: apri il workbook subito dopo averlo salvato (di nuovo, perchè? è lo stesso workbook che hai  in memoria in wBook...) e *NON* lo chiudi/liberi l'oggetto prima del .Quit; 9 su 10, se guardi il task manager questo fa si che il processo di EXCEL non venga chiuso, motivo per cui vedi il messaggio anche in uscita da Windows
 
La parte finale dovrebbe essere più simile a 
 
 
Try
  wBook.SaveAs(...)
Catch ex ...
 
Finally
   'Se hai variabili che fanno riferimento ai
   'singoli worksheet, distruggi esplicitamente anche quelle
 
   wBook.Close
   wBook=Nothing
   excel.Quit '.Visible=False è superfluo
   excel=Nothing
End Try

 End Try
 
 
Ti posto tutto il codice di ExportXls
 
la parte finale ora è così:
 
Try
            wBook.SaveAs(strFileName)
        Catch ex As Exception
 
        Finally
            wBook.Close()
            wBook = Nothing
            excel.Quit()
            excel = Nothing
        End Try
 
Ora il processo si chiude ma sull'apertura del file continua a chiedere se aprirlo o salvarlo (il pulsante che esegue ExportXls fa anche un Shell(Explorer C:\....) per aprire il file dopo il lavoro.
 
Questo è il codice completo di ExportXls
 
Public Sub ExportXls()
 
        'verfying the datagridview having data or not
        If ((DataGridView1.Columns.Count = 0) Or (DataGridView1.Rows.Count = 0)) Then
            Exit Sub
        End If
 
        'Creating dataset to export
        Dim dset As New DataSet
        'add table to dataset
        dset.Tables.Add()
        'add column to that table
        For i As Integer = 0 To DataGridView1.ColumnCount - 1
            dset.Tables(0).Columns.Add(DataGridView1.Columns(i).HeaderText)
        Next
        'add rows to the table
        Dim dr1 As DataRow
        For i As Integer = 0 To DataGridView1.RowCount - 1
            dr1 = dset.Tables(0).NewRow
            For j As Integer = 0 To DataGridView1.Columns.Count - 1
                dr1(j) = DataGridView1.Rows(i).Cells(j).Value
            Next
            dset.Tables(0).Rows.Add(dr1)
        Next
 
        Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
        Dim wBook As Microsoft.Office.Interop.Excel.Workbook
        Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet
 
        wBook = excel.Workbooks.Add()
        wSheet = wBook.ActiveSheet()
 
        Dim dt As System.Data.DataTable = dset.Tables(0)
        Dim dc As System.Data.DataColumn
        Dim dr As System.Data.DataRow
        Dim colIndex As Integer = 0
        Dim rowIndex As Integer = 0
 
        For Each dc In dt.Columns
            colIndex = colIndex + 1
            excel.Cells(1, colIndex) = dc.ColumnName
        Next
 
        For Each dr In dt.Rows
            rowIndex = rowIndex + 1
            colIndex = 0
            For Each dc In dt.Columns
                colIndex = colIndex + 1
                excel.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
 
            Next
        Next
 
        wSheet.Columns.AutoFit()
        Dim strFileName As String = "C:\Tabella ricette macine.xlsx"
        Dim blnFileOpen As Boolean = False
        Try
            Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(strFileName)
            fileTemp.Close()
        Catch ex As Exception
            blnFileOpen = False
        End Try
 
        If System.IO.File.Exists(strFileName) Then
            System.IO.File.Delete(strFileName)
        End If
 
        Try
            wBook.SaveAs(strFileName)
        Catch ex As Exception
 
        Finally
            'excel.Workbooks.Open(strFileName)
            wBook.Close()
            wBook = Nothing
            'excel.Visible = False
            excel.Quit()
            excel = Nothing
        End Try
 
    End Sub

     End Sub
 
Nessuno sa il perchè della richiesta di salvataggio del file?


provato adesso il tuo codice
funziona perfettamente
a me non chiede nessuna conferma
 
 

il messaggio che compare ha sotto un flag col quale si richiede o meno di essere avvisati dal popup.
Tolta la spunta, ora anche a me lo salva senza chiedere nulla, magari è qualcosa di windows e non dipende dal mio codice..
 


boh....
non so
io win2003 +vb10

Ora funziona quindi direi che va bene così...