问题描述
大家好,我通过一下代码导出Excel文件:如果outputPath:@"F:outputFormDataBase.xls");输出文件:F-outputFormDataBase.xls;如果outputPath:@"导出1.xls");直接提示response.WriteFile(fullFileName);未能找到文件:导出1.xls文件;请大家帮忙,谢谢!outputPath:保存路径dataSet:数据集deleteOldFile:是否删除已有的老文件//保存excepublicvoidDataSetToLocalExcel(DataSetdataSet,stringoutputPath,booldeleteOldFile){if(deleteOldFile){if(System.IO.File.Exists(outputPath)){System.IO.File.Delete(outputPath);}}//CreatetheExcelApplicationobjectMicrosoft.Office.Interop.Excel.ApplicationClassexcelApp=newMicrosoft.Office.Interop.Excel.ApplicationClass();//CreateanewExcelWorkbookMicrosoft.Office.Interop.Excel.WorkbookexcelWorkbook=excelApp.Workbooks.Add(Type.Missing);intsheetIndex=0;//CopyeachDataTableforeach(System.Data.DataTabledtindataSet.Tables){//CopytheDataTabletoanobjectarrayobject[,]rawData=newobject[dt.Rows.Count+1,dt.Columns.Count];//Copythecolumnnamestothefirstrowoftheobjectarrayfor(intcol=0;col<dt.Columns.Count;col++){rawData[0,col]=dt.Columns[col].ColumnName;}//Copythevaluestotheobjectarrayfor(intcol=0;col<dt.Columns.Count;col++){for(introw=0;row<dt.Rows.Count;row++){rawData[row+1,col]=dt.Rows[row].ItemArray[col];}}//CalculatethefinalcolumnletterstringfinalColLetter=string.Empty;stringcolCharset="ABCDEFGHIJKLMNOPQRSTUVWXYZ";intcolCharsetLen=colCharset.Length;if(dt.Columns.Count>colCharsetLen){finalColLetter=colCharset.Substring((dt.Columns.Count-1)/colCharsetLen-1,1);}finalColLetter+=colCharset.Substring((dt.Columns.Count-1)%colCharsetLen,1);//CreateanewSheetMicrosoft.Office.Interop.Excel.WorksheetexcelSheet=(Microsoft.Office.Interop.Excel.Worksheet)excelWorkbook.Sheets.Add(excelWorkbook.Sheets.get_Item(++sheetIndex),Type.Missing,1,Microsoft.Office.Interop.Excel.XlSheetType.xlWorksheet);excelSheet.Name=dt.TableName;Microsoft.Office.Interop.Excel.Rangera=excelSheet.get_Range(excelApp.Cells[3,1],excelApp.Cells[3,1]);ra.ColumnWidth=20;//FastdataexporttoExcelstringexcelRange=string.Format("A1:{0}{1}",finalColLetter,dt.Rows.Count+1);excelSheet.get_Range(excelRange,Type.Missing).Value2=rawData;//MarkthefirstrowasBOLD((Microsoft.Office.Interop.Excel.Range)excelSheet.Rows[1,Type.Missing]).Font.Bold=true;}//excelApp.Application.AlertBeforeOverwriting=false;excelApp.Application.DisplayAlerts=false;//SaveandClosetheWorkbookexcelWorkbook.SaveAs(outputPath,Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);excelWorkbook.Close(true,Type.Missing,Type.Missing);excelWorkbook=null;//ReleasetheApplicationobjectexcelApp.Quit();excelApp=null;//CollecttheunreferencedobjectsGC.Collect();GC.WaitForPendingFinalizers();this.DownLoadExcel1(outputPath);}//下载privatevoidDownLoadExcel1(stringfullFileName){HttpResponseresponse=HttpContext.Current.Response;response.Clear();response.WriteFile(fullFileName);stringhttpHeader="attachment;filename="+fullFileName;response.AppendHeader("Content-Disposition",httpHeader);response.Charset="utf-8";response.ContentEncoding=System.Text.Encoding.Default;response.ContentType="application/vnd.ms-excel";System.IO.StringWriteroStringWriter=newSystem.IO.StringWriter();System.Web.UI.HtmlTextWriteroHtmlTextWriter=newSystem.Web.UI.HtmlTextWriter(oStringWriter);response.BufferOutput=true;response.AppendToLog(DateTime.Now.ToString()+"导出Excel文件");response.Flush();System.IO.File.Delete(fullFileName);//删除临时文件//response.End();HttpContext.Current.ApplicationInstance.CompleteRequest();}
解决方案
解决方案二:
遇到问题先分解,一步一步测试你后面的路径跟前面的差的太多既有中文,又用的相对路径再做2组测试:1.绝对路径带中文2.相对路径不带中文看到底是中文没认出来,还是相对路径没写对.
解决方案三:
还有,既然是导出供人下载的,你就直接用当前时间或GUID拼个字符串当临时文件名就好了,不要胡乱起个中文名.万一有多个用户同时在导出,不是都互相覆盖了么
解决方案四:
你的路径给错了,或者是更加详细,比如@".导出1.xls"要不你在this.DownLoadExcel1(outputPath);的时候这样写if(Path.IsPathRootedoutputPath())this.DownLoadExcel1(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,outputPath));
解决方案五:
异常详细信息:System.IO.FileNotFoundException:未能找到文件“K:学习919StorageSystemWebModuleBaseInfooutputFormDataBase.xls”。
解决方案六:
完整的路径还是找不到
解决方案七:
把导出和下载分开调试一步步来别老想一步到位啊很明显你导出的路径错误,导致下载的时候找不到文件好好找找你到底导出到哪里去了然后对应的修改路径