我是在VS2005下用C#实现的,将一个Access数据库导出到指定的Excel文件中,调试成功完全没有问题。
但是当我用iis发布之后,在执行Access.ApplicationClass oAccess = new Access.ApplicationClass();的时候就出异常了,也没办法调试,因为我在vs里面运行时完全可以的。我的系统是FAT的,应该不是权限的问题。代码如下:
Access.ApplicationClass oAccess = new Access.ApplicationClass();
oAccess.Visible = false;
try
{
oAccess.OpenCurrentDatabase(Database.Getdir() + "App_Data\\server.mdb", false, "");
//导出到excel
oAccess.DoCmd.TransferSpreadsheet(Access.AcDataTransferType.acExport, Access.AcSpreadSheetType.acSpreadsheetTypeExcel9, "Client", Database.Getdir() + "data\\server.xls", true, null, null);
oAccess.CloseCurrentDatabase();
oAccess.DoCmd.Quit(Access.AcQuitOption.acQuitSaveNone);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oAccess);
oAccess = null;
return "data\\server.xls";
}
catch (Exception ex)
{
return "no.aspx";
}
finally
{
GC.Collect();
}
但是当我用iis发布之后,在执行Access.ApplicationClass oAccess = new Access.ApplicationClass();的时候就出异常了,也没办法调试,因为我在vs里面运行时完全可以的。我的系统是FAT的,应该不是权限的问题。代码如下:
Access.ApplicationClass oAccess = new Access.ApplicationClass();
oAccess.Visible = false;
try
{
oAccess.OpenCurrentDatabase(Database.Getdir() + "App_Data\\server.mdb", false, "");
//导出到excel
oAccess.DoCmd.TransferSpreadsheet(Access.AcDataTransferType.acExport, Access.AcSpreadSheetType.acSpreadsheetTypeExcel9, "Client", Database.Getdir() + "data\\server.xls", true, null, null);
oAccess.CloseCurrentDatabase();
oAccess.DoCmd.Quit(Access.AcQuitOption.acQuitSaveNone);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oAccess);
oAccess = null;
return "data\\server.xls";
}
catch (Exception ex)
{
return "no.aspx";
}
finally
{
GC.Collect();
}
用Excel.Application xlApp=null;
xlApp=new Excel.Application();
Excel.Workbooks workbooks=xlApp.Workbooks;
试试
导出方法
//导出Excel
protected void Button1_Click(object sender, EventArgs e)
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode("中文名称", System.Text.Encoding.UTF8) + ".xls\"");
Response.Charset = "gb2312";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "application/ms-excel";
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
System.IO.StringWriter stringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
GridView1.AllowPaging = false;//导出前先取消分页,以便能将所有数据导出
DataBindData();//然后在重新绑定
GridView1.RenderControl(htmlWriter);
Response.Write(stringWriter.ToString());
Response.End();
GridView1.AllowPaging = true;
DataBindData();
}
//----------------------最后别忘了这个-------------------------------------
//重新一个空的VerifyRenderingInServerForm方法
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}
1个方法是行数不够就分多个工作表
2、导出为CSV文件,本质是文本文件,可以不限行数,用法如下
SELECT * INTO [3#csv] IN 'D:\'[Text;] FROM b_Account[3#csv]为文件名,实际表示的是3.csv,
'D:\' 为文件路径
[Text;] 表示驱动为文本文件,该项不要改动CSV文件也会自动用EXCEL打开