2013-08-27 6 views
6

Sto tentando di modificare e salvare i dati in Excel. Con il codice qui sotto, sto accedendo al foglio, eseguendo modifiche, quindi salvando il file. Non riesco a salvare il file. Qui è il mio codice:Impossibile salvare il file Excel utilizzando C#

Application excel = new Application(); 
     excel.Visible=true; 
     Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx"); 
     Worksheet ws = (Worksheet)wb.Worksheets[1]; 
     ws.Cells[1, 1] = "sagar"; 
     ws.Cells[2, 1] = "sagar"; 
     ws.Cells[3, 1] = "sagar"; 
     wb.Save(); 
     wb.close(); 

sto ricevendo questo errore: "il file denominato 'BookExcel1.xlsx' esiste già in questa posizione Vuoi sostituirlo?"

così ho cambiato il codice per:

Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx",0, false, 5, "", "", 
      false, XlPlatform.xlWindows, "", true, false, 
      0, true, false, false);); 

Poi errore è: "BookExcel1.xlsx viene modificato da user_name.open come sola lettura". Se si fa clic sul pulsante 'Annulla', ricevo l'eccezione di cui sopra con "eccezione da HRESULT: 0x800A03EC"

Ho anche provato:

wb.SaveAs(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx"); 
wb.Close(true,null,null); 

Da che ricevo lo stesso errore, con il file di cui sopra mostrando le modifiche.

Qualcuno può dirmi come posso salvare il file con le modifiche?

+0

Don' Lo so davvero, ma solo un pensiero veloce ... sei sicuro che sia ok usare lo stesso percorso file con 'SaveAs'? Di solito questo crea un nuovo documento. Esiste invece una funzione 'Save()' che potresti usare? – musefan

+0

Non renderlo visibile. –

+1

Non vedo che tu rilasci oggetti COM creati .. Ricorda di rilasciare sempre ogni singolo oggetto Excel che crei/usi. Se si verifica un errore e non si chiude la cartella di lavoro, quella potrebbe rimanere aperta, quindi in sola lettura per nuove istanze ... Altro: excel non è chiuso (utilizzando 'excel.Quit()') in modo da poter avere un sacco di processi di Excel in memoria ... – Marco

risposta

1

Questo accade perché il file stavo cercando di aprire era già aperta in applicazione Excel. Nel mio codice, non stavo chiudendo l'applicazione Excel per alcune condizioni. Ecco perché lo stava aprendo con permessi di sola lettura. Quindi non sono stato in grado di salvare quel file dopo l'aggiornamento. Per aprirlo con read-write, devi prima chiudere quel file. Successivamente, è possibile aprirlo e eseguire facilmente operazioni di lettura e scrittura sul file.

È possibile chiudere per vedere tutte le applicazioni di Excel che sono già aperte utilizzando seguente codice:

Application excel = (Application)Marshal.GetActiveObject("Excel.Application"); 
Workbooks wbs = excel.Workbooks; 
foreach (Workbook wb in wbs) 
{ 
    Console.WriteLine(wb.Name); // print the name of excel files that are open 
    wb.Save(); 
    wb.Close(); 
} 
excel.Quit(); 

Nella parte superiore, aggiungere il seguente codice e fare riferimento a Microsoft.Office.Interop.Excel

using Microsoft.Office.Interop.Excel; 
using System.Runtime.InteropServices; 
0

Questo problem è per foglio compatibile con versioni precedenti (a .xls) anziché .xlsx.

To allow sheets to be opened in pre office 2007 version it can't contain more than 65k rows. You can check the number of rows in your sheet by using ctrl+arrowdown till you hit the bottom. If you try to get a range larger than that number of rows it will create an error

2

Verificare che non sia già in esecuzione un processo Excel.exe. Inoltre, è necessario aprire la cartella di lavoro in modo che sia modificabile.

Questo codice funziona:

string txtLocation = Path.GetFullPath(InputFile); 

object _missingValue = System.Reflection.Missing.Value; 
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 
Excel.Workbook theWorkbook = excel.Workbooks.Open(txtLocation, 
                 _missingValue, 
                 false, 
                 _missingValue, 
                 _missingValue, 
                 _missingValue, 
                 true, 
                 _missingValue, 
                 _missingValue, 
                 true, 
                 _missingValue, 
                 _missingValue, 
                 _missingValue); 

//refresh and calculate to modify 
theWorkbook.RefreshAll(); 
excel.Calculate(); 
theWorkbook.Save(); 
theWorkbook.Close(true); 
excel.Quit();