Yo tuve un problema parecido, pero lo solucioné así:
Código PHP:
private void cmdInformeUser_Click(object sender, System.EventArgs e)
{
// Utilizamos una librería externa llamada "ExportToExcel" para poder realizar la operación
// de escribir en el fichero de Excel los datos de la base de datos
//
// Lo hemos utilizado de CodeProject de esta URL:
// http://www.codeproject.com/KB/office/Excel_Export.aspx
ExportToExcel.ExcelExport objExport = new ExportToExcel.ExcelExport();
// Definimos el directorio temporal
objExport.TempFolder = @"\temp\";
// Definimos el directorio de la plantilla
objExport.TemplateFolder = @"template";
// Definimos el estilo del XLS
objExport.XSLStyleSheetFolder = @"XSLStyleSheet";
// Limpiamos de ficheros temporales, puesto que cada vez que se crea un fichero de Excel,
// se van acumulando. De este modo se impide que ocurra.
objExport.CleanUpTemporaryFiles();
// Definimos la consulta
string sSel = "select idUser, name, surnames, company, nif, telephone, mobile, fax, email, country, city, address, number, floor, cp, login from users order by idUser desc";
// Definimos el fichero
string fichero="";
// Definimos las variables para realizar la consulta a la base de datos
SqlDataAdapter da;
DataTable dt = new DataTable();
System.Data.SqlClient.SqlCommandBuilder commbuilder;
System.Data.DataSet dset = new System.Data.DataSet();
try
{
// Abrimos la conexión y rellenamos los datos al dataset
da = new SqlDataAdapter(sSel, conexion);
commbuilder = new System.Data.SqlClient.SqlCommandBuilder(da);
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da.Fill(dset);
// Metemos datos al DataGrid
this.dg.DataSource = dset;
this.dg.DataBind();
}
// Si hay error, se muestra
catch(Exception ex)
{
Response.Write("Error: " + ex.Message);
}
// Transformamos los datos de la tabla de la Grid en un formato que pueda ser leído
// por Excel
fichero=objExport.TransformDataTableToExcel(dset.Tables[0],true);
// Lo exportamos a un fichero (nos aparecerá una ventanita diciendo si desea guardar
// el fichero
objExport.SendExcelToClient(fichero);
}
Sin problemas y funciona correctamente. Además me pasaba cosas raras (con el código que se ha puesto de los primeros) con Vista y con XP funcionaba bien. Pero fue hacer eso y ya no hay fallo...
Es mejor ponerlo en una carpeta aparte, para que no dé fallos. En mi caso lo hice con temp.
Saludos.