|
|
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 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:.
|
|
|
|
|
C# scrivere in un file Excel
Ultimo Post 09 feb 2009 16.07 by Sabrina (DNW TEAM). 3 Risposte.
|
Ordina:
|
 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
|
|
|