180 messaggi dal 06 settembre 2002
Salve, a tutti. DEvo fare l'esportazione di una datable in excel; prima usavo una gridview...ma il problema nasceva dal fatto che quando facevo il databind questa gridview andava in timeout perchè i dati sono molti. Ho provato ad utilizzare le PIA. Riesco a salvare il file in formato excel, però poi non riesco a fare il download del file dal server, mi dice che:

Il processo non può accedere al file 'c:\stampe\rino1.xls' perché è in uso da un altro processo.

Nella libreria faccio questo:

object oMissing = System.Reflection.Missing.Value;

Microsoft.Office.Interop.Excel.ApplicationClass ap = new Microsoft.Office.Interop.Excel.ApplicationClass();
Microsoft.Office.Interop.Excel.Workbook wbk = (Microsoft.Office.Interop.Excel.Workbook)ap.Workbooks.Add(oMissing);
Microsoft.Office.Interop.Excel.Worksheet sht = (Microsoft.Office.Interop.Excel.Worksheet)wbk.Sheets[1];

for (int i = 0; i < k.Rows.Count; i++)
{
for (int j = 0; j < k.Columns.Count; j++)
{
Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)sht.Cells[i + 1, j + 1];
range.Value2 = k.Rows[i][j].ToString();
}
}

ap.DisplayAlerts = false;
ap.Workbooks[1].SaveAs(@"c:\stampe\rino1.xls", oMissing, oMissing, oMissing, oMissing, oMissing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
oMissing, oMissing, oMissing, oMissing, oMissing);
ap.Quit();


Poi un volta salvato il file provo a fare

Response.ClearHeaders();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("content-disposition", "attachment; filename= rino");
Response.WriteFile(@"c:\stampe\rino1.xls");

Response.End();

Mi dice che il file è in uso..qualcuno può aiutarmi. Grazie.
2.198 messaggi dal 30 novembre 2001
fai il Response.Flush() della response prima di chiamare la Response.End();
180 messaggi dal 06 settembre 2002
Ho capito qual è il problema è una cosa da non credere.

Posto la mia soluzione:

Microsoft.Office.Interop.Excel.ApplicationClass ap = new Microsoft.Office.Interop.Excel.ApplicationClass();
Microsoft.Office.Interop.Excel.Workbook wbk = (Microsoft.Office.Interop.Excel.Workbook)ap.Workbooks.Add(oMissing);
Microsoft.Office.Interop.Excel.Worksheet sht = (Microsoft.Office.Interop.Excel.Worksheet)wbk.Sheets[1];

for (int i = 0; i < k.Rows.Count; i++)
{
for (int j = 0; j < k.Columns.Count; j++)
{
Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)sht.Cells[i + 1, j + 1];
range.Value2 = k.Rows[i][j].ToString();
}
}

ap.DisplayAlerts = false;
ap.Workbooks[1].SaveAs(@"c:\stampe\rino1.xls", oMissing, oMissing, oMissing, oMissing, oMissing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
oMissing, oMissing, oMissing, oMissing, oMissing);
ap.Quit();
releaseComObj(ap);


private void releaseComObj(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch { }
finally
{
o = null;
}
}


praticamente è colpa del prcocesso di excel che nn si chiudeva.

Grazie a tutti.
Modificato da bigrino il 17 novembre 2008 16.55 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.