那位帮忙解释下?
DownExcel.aspx.cs
#region 导出Excel文件开始
// 导出Excel文件
protected void btnExportExcel_Click(object sender, EventArgs e)
{
//得到需要导入Excel的DataTable
// string mfilepath = Server.MapPath("./") + "DownFile/TranSport.xls";
string SearchDate = Request["SearchD"].Trim().ToString();
StringBuilder strSql = new StringBuilder();
GridView myGridView = new GridView();
DataTable dt;
try
{
//--------------------------------------------------------------
strSql.Append("SELECT [BUKRS],convert(char(6),[BUDAT],112) as BUDAT_T,[DELIVERY_CLS],[BEZEI],[VTEXT],[BEZEI2],SUM([LFIMG]) as SUMLFIMG,[VRKME],SUM([NETWR]) as SUMBUKRS, 0 as lilun ,[WAERS]");
strSql.Append(" FROM MM.TranSport ");
strSql.Append(" WHERE [BUKRS]='8200' and convert(char(6),[BUDAT],112)='" + SearchDate + "' ");
strSql.Append(" GROUP BY ");
strSql.Append(" [DELIVERY_CLS],[BEZEI],[VTEXT],[BEZEI2],[WAERS],[VRKME],[BUKRS],convert(char(6),[BUDAT],112) ");
DataSet ds = new DataSet();
ds = help.getdata(strSql.ToString(), "tab");
//DataTable dt = LoadDataTable();
dt = ds.Tables[0];
myGridView.DataSource = dt;
// 绑定数据
//myGridView.DataBind();
dt.Columns["BUKRS"].ColumnName = "公司代码";
dt.Columns["BUDAT_T"].ColumnName = "结算月份";
dt.Columns["DELIVERY_CLS"].ColumnName = "成品发运类型";
dt.Columns["BEZEI"].ColumnName = "省市车站描述";
dt.Columns["VTEXT"].ColumnName = "运输方式描述";
dt.Columns["BEZEI2"].ColumnName = "装运类型的描述";
dt.Columns["SUMLFIMG"].ColumnName = "实际已交货量总和(按销售单位)";
dt.Columns["WAERS"].ColumnName = "货币代码";
dt.Columns["SUMBUKRS"].ColumnName = "发运成本条目的货币中的净值";
dt.Columns["VRKME"].ColumnName = "销售单位";
dt.Columns["lilun"].ColumnName = "理论价格";
myaction.SaveAsExcel(dt); //输出内容到excel对象,数据源DataTable 实例必须为dt
}
catch (System.Exception ex)
{
Response.Write( "查询数据库时发生错误!错误信息:" + ex.Message + "<br>可能是因为数据库连接出现问题!请联系系统管理员!<br>");
// return;
}
}
// 导出Excel文件必须要下面这个,据说是vs2005的BUG,日
#endregion 导出EXCEL文件结束
MyAction.cs
public class MyAction
{
public MyAction()
{
//
// TODO: Add constructor logic here
//
}
public void SaveAsExcel(DataTable dt)
{
Microsoft.Office.Interop.Excel.Application excelKccx = new Microsoft.Office.Interop.Excel.Application();//创建excel对象
excelKccx.Workbooks.Add(true);//创建excel工作薄
//excelKccx.
//DataTable myDataTable=myDataSet.Tables["库存信息"];//创建一个数据表,得到DataSet中“库存信息”表中的数据
int row = 2;
//把数据表的各个信息输入到excel表中
for (int i = 0; i < dt.Columns.Count; i++)//取字段名
{
excelKccx.Cells[1, i + 1] = dt.Columns[i].ColumnName.ToString();
}
for (int i = 0; i < dt.Rows.Count; i++)//取记录值
{
for (int j = 0; j < dt.Columns.Count; j++)
{
excelKccx.Cells[row,j + 1] = dt.Rows[i][j].ToString();
}
row++;
}
excelKccx.Visible = true;//使excel可见,输出Excel文件*/
}
protected bool Copy_File(string path, string path2)
{
try
{
//using (FileStream fs = File.Create(path)) { }
File.Delete(path2);
File.Copy(path, path2);
return true;
}
catch //(Exception e)
{
return false;
// Console.WriteLine(e.ToString());
}
}
public void UpAsExcel()
{
}
}
14 个解决方案
#1
权限问题.
试着设置访问账号有操作权限
不过那样不安全.
试着设置访问账号有操作权限
不过那样不安全.
#2
EXCEL操作权限
可以搜索一下EXCEL DCOM权限设置
可以搜索一下EXCEL DCOM权限设置
#3
iis有没有问题啊!
#4
回楼上的几位:
DCOM组件服务中给MICROSOFT.EXCEL组件 赋予ASP.NET的操作权限我已经做了,不做这个之前会提示类似这样的错误:Creating an instance of the COM component with CLSID 做了之后这个问题没有了,就是出现点击按钮后页面只是加载并刷新了下,没有导出和打开excel的操作。程序也不报错。而在VS里面运行程序的时候一切都是正常的,点击按钮后能导出和打开excel文件。
回三楼的:
IIS肯定是装好了的,要不怎么能访问页面呢?
DCOM组件服务中给MICROSOFT.EXCEL组件 赋予ASP.NET的操作权限我已经做了,不做这个之前会提示类似这样的错误:Creating an instance of the COM component with CLSID 做了之后这个问题没有了,就是出现点击按钮后页面只是加载并刷新了下,没有导出和打开excel的操作。程序也不报错。而在VS里面运行程序的时候一切都是正常的,点击按钮后能导出和打开excel文件。
回三楼的:
IIS肯定是装好了的,要不怎么能访问页面呢?
#5
在网站要操作的文件夹中添加everyone或者network service账号并赋权试试.
#6
不行啊,那位救救偶吧。。。。
#7
以前遇到的问题是 发布以后报错,excel文件格式不正确。错误格式右键用记事本打开的时候是html格式的。不知道是不是这个。。。
#8
这个问题我也碰到过。
一般情况下是DCOM中的权限配置问题。
一般情况下是DCOM中的权限配置问题。
#9
不是,你这个问题是输出EXCEL文件的方法问题。
#10
继续在线等。。。。
#11
我也等
#12
最后重新写了个方法,导出。
#13
检索 COM 类工厂中 CLSID 为 ? 的组件时失败 解决方案,以前有用asp.net导出excel,在本机测试通过,但部署到服务器上提示检索 COM 类工厂中 CLSID 为 ? 的组件时失败,在网上找了很多相关的内容都说的不是很清楚,大多为抄袭,没有亲自去试验过,今天又有个项目需要这样做,特点总结一下与大家分享一下。
遇到这样的错误,就是IIS没有调用excel com组建的权限,添加适当的权限就可以解决这个问题,网上就又提到吧什么administrator 或是everyone,这样做太不安全了,在局域网到还是可以这么做,但是如果在公网最后不要,这样很容易受到攻击。
讲一下具体的解决方案,实际上就是设置权限了。
1.在运行中输入dcomcnfg.exe
2.右击属性
IIS_WPG; IUSR_; IWAM_
三个权限都要添加,如果你的WEB用的是默认账号的话。
#14
谢谢楼上的这么久了好来回复,留着给需要用的人吧。
#1
权限问题.
试着设置访问账号有操作权限
不过那样不安全.
试着设置访问账号有操作权限
不过那样不安全.
#2
EXCEL操作权限
可以搜索一下EXCEL DCOM权限设置
可以搜索一下EXCEL DCOM权限设置
#3
iis有没有问题啊!
#4
回楼上的几位:
DCOM组件服务中给MICROSOFT.EXCEL组件 赋予ASP.NET的操作权限我已经做了,不做这个之前会提示类似这样的错误:Creating an instance of the COM component with CLSID 做了之后这个问题没有了,就是出现点击按钮后页面只是加载并刷新了下,没有导出和打开excel的操作。程序也不报错。而在VS里面运行程序的时候一切都是正常的,点击按钮后能导出和打开excel文件。
回三楼的:
IIS肯定是装好了的,要不怎么能访问页面呢?
DCOM组件服务中给MICROSOFT.EXCEL组件 赋予ASP.NET的操作权限我已经做了,不做这个之前会提示类似这样的错误:Creating an instance of the COM component with CLSID 做了之后这个问题没有了,就是出现点击按钮后页面只是加载并刷新了下,没有导出和打开excel的操作。程序也不报错。而在VS里面运行程序的时候一切都是正常的,点击按钮后能导出和打开excel文件。
回三楼的:
IIS肯定是装好了的,要不怎么能访问页面呢?
#5
在网站要操作的文件夹中添加everyone或者network service账号并赋权试试.
#6
不行啊,那位救救偶吧。。。。
#7
以前遇到的问题是 发布以后报错,excel文件格式不正确。错误格式右键用记事本打开的时候是html格式的。不知道是不是这个。。。
#8
这个问题我也碰到过。
一般情况下是DCOM中的权限配置问题。
一般情况下是DCOM中的权限配置问题。
#9
不是,你这个问题是输出EXCEL文件的方法问题。
#10
继续在线等。。。。
#11
我也等
#12
最后重新写了个方法,导出。
#13
检索 COM 类工厂中 CLSID 为 ? 的组件时失败 解决方案,以前有用asp.net导出excel,在本机测试通过,但部署到服务器上提示检索 COM 类工厂中 CLSID 为 ? 的组件时失败,在网上找了很多相关的内容都说的不是很清楚,大多为抄袭,没有亲自去试验过,今天又有个项目需要这样做,特点总结一下与大家分享一下。
遇到这样的错误,就是IIS没有调用excel com组建的权限,添加适当的权限就可以解决这个问题,网上就又提到吧什么administrator 或是everyone,这样做太不安全了,在局域网到还是可以这么做,但是如果在公网最后不要,这样很容易受到攻击。
讲一下具体的解决方案,实际上就是设置权限了。
1.在运行中输入dcomcnfg.exe
2.右击属性
IIS_WPG; IUSR_; IWAM_
三个权限都要添加,如果你的WEB用的是默认账号的话。
#14
谢谢楼上的这么久了好来回复,留着给需要用的人吧。