Ricerca 
it-ITen-US
Registrazione
Accedi
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Stampa     


DotNetWork Forums
C# scrivere in un file Excel
Ultimo Post 09 feb 2009 16.07 by Sabrina (DNW TEAM). 3 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
Autore Messaggi

Posts:5

--
05 feb 2009 15.38  
Ciao a tutti,
devo fare un programmino C# che raccoglie un po' di dati (senza sapere a priori quanti) e li trasferisca in un file Excel.
So come creare il suddetto file e come inserire dei dati, ma solo se è noto a priori quanti sono, utilizzando un array bidimensionale:

double[,] saRet = new double[5, 5];
//loop di inserimento dai in saRet
range.set_Value(Missing.Value, saRet);


Questo modo però non va bene per il mio problema, sia perchè non so a priori quanti dati avrò (quindi non posso inizializzare saRet), sia perchè non va bene per dati di tipo misto (double, stringhe, interi...).
Sarebbe opportuno avere un modo per accedere singolarmente alle celle, un po' come fanno le macro, tipo:

Range(Cells(1,1),Cells(1,1))= "dato1"
Range(Cells(1,2),Cells(1,2))= 100
Range(Cells(2,1),Cells(2,1))= "dato2"
Range(Cells(2,2),Cells(2,2))= 100

Come posso fare?


Inoltre, quando chiudo il file mi appare la finestra di dialogo di salvataggio. Esiste un modo per salvare automaticamente con un nome predefinito? (Credo che la funzione Workbook.SaveAs possa servire, ma non ho capito tutti i parametri che vuole)

Grazie mille

Posts:811

--
06 feb 2009 17.46  

Ti basta creare il range x la prima cella e poi spostarti in verticale od orizzontale

Il codice che segue fa alcune cose su un worksheet excel ma è l'esperimento con cui ho verificato cosa si poteva fare prima di fare una cosa quasi seria

 

public static void TestCreateFile(ExcelAuto xls, StringCollection array)

{

Excel.Workbook objBook = null;

Excel.Worksheet objSheet = null;

//object fileName = "normal.dot";

//object newTemplate = false;

//object docType = 0;

//object isVisible = true;

xls.XlsVisible = true;

objBook = xls.XlsApp.Workbooks.Add(xls.Missing);

foreach (Excel.Worksheet sheet in objBook.Sheets)

{

objSheet = sheet;

break;

}

if (objSheet == null)

{

objSheet = new Excel.Worksheet();

objBook.Sheets.Add(xls.Missing, xls.Missing, 1, objSheet);

}

objSheet.Name = "Miao";

string startCell = "A1";

string endCell = string.Format("A{0}", array.Count + 1);

Excel.Range rng = objSheet.get_Range(startCell, endCell);

int RowIndex = 1;

int ColIndex = 1;

rng[RowIndex++, ColIndex] = "Intestazione";

foreach (string str in array)

{

rng[RowIndex++, ColIndex] = str;

}

objSheet.get_Range(startCell, startCell).Font.Size = 14;

objSheet.get_Range(startCell, startCell).Font.Bold = true;

objSheet.get_Range(startCell, endCell).EntireColumn.AutoFit();

objSheet.get_Range(startCell, endCell).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium,

Excel.XlColorIndex.xlColorIndexAutomatic, Excel.XlColorIndex.xlColorIndexAutomatic);

rng.Copy(xls.Missing);

Excel.Range rngDest = objSheet.get_Range("c1", "c1");

rngDest.PasteSpecial(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteAll, Microsoft.Office.Interop.Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, xls.Missing, xls.Missing);

rngDest.EntireColumn.AutoFit();

startCell = "A15";

endCell = string.Format("A15");

RowIndex = 1;

ColIndex = 1;

rng = objSheet.get_Range(startCell, endCell);

rng[RowIndex, ColIndex++] = "Descrizione riga";

string lastCell = startCell;

foreach (string str in array)

{

rng[RowIndex, ColIndex++] = str;

}

rng = rng.get_Resize(RowIndex, ColIndex);

rng[RowIndex, ColIndex] = rng.get_Address(Type.Missing, Type.Missing,

Excel.XlReferenceStyle.xlA1,

Type.Missing, Type.Missing);

objSheet.get_Range(startCell, startCell).Font.Size = 14;

objSheet.get_Range(startCell, startCell).Font.Bold = true;

objSheet.get_Range(startCell, lastCell).EntireColumn.AutoFit();

rng.BorderAround(

Excel.XlLineStyle.xlContinuous,

Excel.XlBorderWeight.xlMedium,

Excel.XlColorIndex.xlColorIndexAutomatic,

Excel.XlColorIndex.xlColorIndexAutomatic);

rng.EntireRow.AutoFit();

rng.EntireColumn.AutoFit();

rng = objSheet.get_Range("a20", "a20");

rng.Formula = "=sum(a1:a19)";

Excel.Range rangeTest = xls.GetRange(objSheet, "A2:C4");

object[,] obj = (object[,])rangeTest.get_Value(Type.Missing);

//MessageBox.Show( rangeTest.get_Value(Type.Missing).ToString());

}

Saluti
Sabrina

Inserito da daigon su 05 feb 2009 16.38
Ciao a tutti,
devo fare un programmino C# che raccoglie un po' di dati (senza sapere a priori quanti) e li trasferisca in un file Excel.
So come creare il suddetto file e come inserire dei dati, ma solo se è noto a priori quanti sono, utilizzando un array bidimensionale:

double[,] saRet = new double[5, 5];
//loop di inserimento dai in saRet
range.set_Value(Missing.Value, saRet);


Questo modo però non va bene per il mio problema, sia perchè non so a priori quanti dati avrò (quindi non posso inizializzare saRet), sia perchè non va bene per dati di tipo misto (double, stringhe, interi...).
Sarebbe opportuno avere un modo per accedere singolarmente alle celle, un po' come fanno le macro, tipo:

Range(Cells(1,1),Cells(1,1))= "dato1"
Range(Cells(1,2),Cells(1,2))= 100
Range(Cells(2,1),Cells(2,1))= "dato2"
Range(Cells(2,2),Cells(2,2))= 100

Come posso fare?


Inoltre, quando chiudo il file mi appare la finestra di dialogo di salvataggio. Esiste un modo per salvare automaticamente con un nome predefinito? (Credo che la funzione Workbook.SaveAs possa servire, ma non ho capito tutti i parametri che vuole)

Grazie mille


Sabrina

Posts:5

--
09 feb 2009 15.39  
Sei un angelo, grazie mille! :-)

Posts:811

--
09 feb 2009 16.07  

Ecco perché ho sempre un cerchio alla testa

 

 

Inserito da daigon su 09 feb 2009 16.39
Sei un angelo, grazie mille! :-)


Sabrina
Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli
Lavorare con gli Array
Il problema dello zaino
2007/07/29 | Autore: Alberto De Luca
Unit testing del codice (parte 2)
Generiamo alcuni unit test per la libreria Helper base ADO.NET
2008/03/09 | Autore: Sabrina Cosolo
Fritto Misto - Classi di uso comune(parte 4)
Helper: Una classe per il log di eventi, con evento, event handler, enumerazione.
2007/10/24 | Autore: Sabrina Cosolo
Formattare le Datagridview
Come modificare il comportamento visuale di una Datagridview
2008/07/27 | Autore: Andrea Zingoni
L'Albero degli elementi
Come iniziare a capire com'è fatto WPF (parte 3)
2007/08/13 | Autore: Patrizia Cosolo
Miniguida alla OOP con il .NET Framework- Parte I
Come prendere per mano un tipico programmatore VB6
2008/07/27 | Autore: Alberto De Luca
Installer Utility - Utilizzare le Azioni Personalizzate
Come creare automaticamente il DataBase durante il processo di installazione
2007/08/14 | Autore: Alberto De luca
Ereditarietà in pillole (Parte 1)
Come creare una TreeView personalizzata
2008/03/22 | Autore: Alberto De Luca
    Stampa     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Condizioni d'uso  .:.  Privacy  .:.  Accedi  .:.