2012-08-27 16 views
5

Ho un file Excel con ~ 10 colonne e 1-20 righe. Devo inserire 1-20 righe con vari elementi di dati.Il modo più semplice per inserire semplici dati in un file Excel da .Net

Mi chiedevo se ci fosse un modo per inserire alcuni tag nel file excel in modo che potessero essere trovati e sostituiti. Qualcosa che contrassegna una colonna come "Nome". In questo modo nel codice ho potuto solo dire:

Name[0] = object.name;

Non sono sicuro se questo metodo esatto è possibile, ma io davvero non hanno bisogno di sollevamento di carichi pesanti e I codici piuttosto non è difficile come le posizioni delle celle il file excel potrebbe cambiare nel tempo.

Dovrò anche aggiungere una cella 'ID' nascosta nella riga. Immagino di poter attraversare quel ponte più tardi però.

+0

Cosa hai provato? MSDN ha esempi? Hai ADO.NET e automazione. Con ADO.NET un intervallo denominato può essere trattato come una tabella. ADO.NET utilizza il provider Jet. ADO.NET richiede una certa struttura ma è molto più semplice (nella mia mente) e non richiede Excel. – Paparazzi

risposta

11

utilizzando ADO.NET è facile per aggiungere una riga in un foglio di Excel

string fileName = @"D:\test.xlsx"; 
string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;" + 
     "Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=0'", fileName); 

using(OleDbConnection cn = new OleDbConnection(connectionString)) 
{ 
    cn.Open(); 
    OleDbCommand cmd1 = new OleDbCommand("INSERT INTO [Sheet1$] " + 
     "([Column1],[Column2],[Column3],[Column4]) " + 
     "VALUES(@value1, @value2, @value3, @value4)", cn); 
    cmd1.Parameters.AddWithValue("@value1", "Key1"); 
    cmd1.Parameters.AddWithValue("@value2", "Sample1"); 
    cmd1.Parameters.AddWithValue("@value3", 1); 
    cmd1.Parameters.AddWithValue("@value4", 9); 
    cmd1.ExecuteNonQuery(); 
} 

Il codice di cui sopra si presuppone che una prima fila con un'intestazione con Column1 ... come nomi di colonna. Inoltre, il codice utilizza il provider ACE OleDB per Excel 2007 o 2010 anziché Microsoft.Jet.OleDb.4.0.

EDIT: Per fare riferimento a un intervallo denominato è possibile modificare il comando SQL per questo

OleDbCommand cmd1 = new OleDbCommand("INSERT INTO [yourNamedRange] " + 
         "VALUES(@value1, @value2, @value3, @value4)", cn); 

Ahimè, non riesco a trovare un modo per fare riferimento alle singole colonne.

+0

Grazie per questa risposta. Sai se esiste un modo semplice per aggiungere in modo più intelligente i valori? Forse usando intervalli denominati già esistenti nel file excel. – PFranchise

+0

Il mio problema è che ci sono diverse righe sopra la sezione che devo modificare. Spiacente, questo non è stato comunicato nel mio post iniziale. – PFranchise

+0

Risposta aggiornata per mostrare un inserto in un NamedRange. – Steve

3
private Excel.Application app = null; 
    private Excel.Workbook workbook = null; 
    private Excel.Worksheet worksheet = null; 
    private Excel.Range workSheet_range = null; 
    private const int FIRTSCOLUMN= 0 //Here const you will use to select good column 
    private const int FIRSTROW= 0 
    private const int FIRSTSHEET= 1 

    app = new Excel.Application(); 
    app.Visible = true; 
    workbook = app.Workbooks.Add(1); 
    worksheet = (Excel.Worksheet)workbook.Sheets[FIRSTSHEET]; 
    addData(FIRSTROW,FIRTSCOLUMN,"yourdata"); 


public void addData(int row, int col, string data) 
    { 
     worksheet.Cells[row, col] = data; 

    }  
Problemi correlati