请教一个导出数据到Excel模板的问题~~·急
今天写了一个导出数据到Excel模板的功能,在Vs自带服务器中运行没有问题,发布到IIS上之后出错:文件夹无写入权限或文件路径长度超过218,但是我检查过权限个年长度都没有问题,下面是代码,请高手帮忙看看问题出在哪里,,急
private void ExportExcelAndPrint(System.Data.DataTable dt, System.Data.DataTable dtTotal)
{
int pageSize = 2;//模板的行数
int OtherRow = 0;
//文件名
ExcelHelper eh = new ExcelHelper();
string NewFileName = Server.MapPath("~") + "/uploaded/" + "Packing.xls";
if (dt.Rows.Count > 0)
{
string sReportFile = Server.MapPath("~") + "\\Resources\\ReportTemplates\\tmp.xls";
//循环打印各页
Microsoft.Office.Interop.Excel.Application oExcel = null;
object objMissing = null;
Microsoft.Office.Interop.Excel.Workbook mybook = null;
Microsoft.Office.Interop.Excel.Sheets excelSheets = null;
Microsoft.Office.Interop.Excel.Worksheet xlsheet = null;
string sDeleteFile = null;
try
{
//创建0字节空临时文件
sDeleteFile = System.IO.Path.GetTempFileName();
File.Copy(sReportFile, sDeleteFile, true);
oExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
objMissing = System.Reflection.Missing.Value;
mybook = (Microsoft.Office.Interop.Excel.Workbook)oExcel.Workbooks.Open(sDeleteFile, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing);
excelSheets = mybook.Worksheets;
xlsheet = (Microsoft.Office.Interop.Excel.Worksheet)excelSheets.get_Item(1);
//当记录多于1行时,修改Excel模板,添加新行
if (dt.Rows.Count > pageSize)
{
OtherRow = dt.Rows.Count - pageSize;
//修改模板,添加行
for (int k = 0; k < OtherRow; k++)
{
Microsoft.Office.Interop.Excel.Range range1 = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("A6", objMissing); ;
range1.Select();
range1.EntireRow.Insert(objMissing, objMissing);
}
}
Microsoft.Office.Interop.Excel.Range ex = null;
//部门
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("B3", objMissing);
ex.Value2 = this.ddlDepartment.SelectedItem.Text;
//年月日
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("B2", objMissing);
ex.Value2 = this.dfTime.SelectedDate.ToShortDateString();
int DoubleRow = 5;
for (int j = 0; j < dt.Rows.Count; j++)
{
//班次
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("A" + DoubleRow, objMissing);
ex.Value2 = dt.Rows[j]["班次"];
//香型
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("B" + DoubleRow, objMissing);
ex.Value2 = dt.Rows[j]["香型"];
//抽检总片数
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("C" + DoubleRow, objMissing);
ex.Value2 = dt.Rows[j]["抽检总片数"];
//不良片数
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("D" + DoubleRow, objMissing);
ex.Value2 = dt.Rows[j]["不良片数"];
//合格率
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("E" + DoubleRow, objMissing);
ex.Value2 = dt.Rows[j]["合格率"].ToString() + "%";
//行增加
DoubleRow += 1;
}
//Total抽检总片数
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("C" + (7 + OtherRow), objMissing);
ex.Value2 = dtTotal.Rows[0]["抽检总片数"];
//Total不良片数
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("D" + (7 + OtherRow), objMissing);
ex.Value2 = dtTotal.Rows[0]["不良片数"];
//Total合格率
ex = (Microsoft.Office.Interop.Excel.Range)xlsheet.get_Range("E" + (7 + OtherRow), objMissing);
ex.Value2 = dtTotal.Rows[0]["合格率"].ToString() + "%";
oExcel.DisplayAlerts = false;
mybook.SaveAs(NewFileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
mybook = null;
xlsheet = null;
oExcel.Quit();
}
catch (System.Runtime.InteropServices.COMException err)
{
//this.MessageBox(err.Message, "系统提示");
throw new Exception(err.Message);
}
finally
{
try
{
mybook = null;
xlsheet = null;
oExcel.Quit();
if (sDeleteFile != null)
File.Delete(sDeleteFile);
}
catch { }
}
}