一、服务器上没有装office

如果要用MS的,这个问题基本不用考虑,只有安装才能解决,没有其它办法! (即使有牛人弄出来 了,估计也是给自己找麻烦)

不过,我只在服务器上装了一个2003精简版, 我开发是用的2007。

二、 "80080005异常"

  "80080005异常"是应用程序对COM组件操作权限不足引起的。于是有了下面的操作:

  1)控制面板->管理工具->组件服务->计算机->我的电脑->DCOM-> Microsoft Excel 应用程序

2)单击属性打开此应用程序的属性对话框。

3) 单击标识选项卡,然后选择交互式用户。

4) 单击默认安全性选项卡。设置当前服务器与ASP.NET相关的用户的访问权限。

  5)单击启动权限的编辑默认值。设置ASP.NET相关的用户的访问权限。

6)主要是network service账户

三、 检索COM类工厂中CLSID的组件时失败80070005

  跟前面的方法差不多  具体配置方法如下:

  1:在服务器上安装office的Excel软件.

  2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"

  3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

  4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框

  5:点击"标识"标签,选择"交互式用户"

  6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机  名),并给它赋予"本地启动"和"本地激活"权限.

  7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.

  8.如果交互式用户设置后出现错误8000401a,可取消交互式用户,指定为administratr,可暂时解决此问题。进一步的解决方式还有待探讨。

另外说明:光按以上设置并不能完全保证不出问题,因为调用OFFICE的操作可能涉及其他的系统资源,很可能依然权限不够而导致问题,只是设置EXCEL应用程序后,还是可能会报80070005的错误,最保险的是应该在dcomcnfg中选中我的电脑然后右键属性->com安全,将里面的访问权限,启动和激活权限全都编辑默认,在当中加上network service(iis 5.0的话,要加的是asp.net用户),并如前面对networkservice设置上相同的权限,这样基本上能保证不会再出什么问题。

四、"异常来自 HRESULT:0x800A03EC "的原因

两种情况,1、Excel的行列都是从1开始的,如果我们习惯性的给worksheet.Cells[0, 0]或者worksheet.Cells[1, 0]或者worksheet.Cells[0, 1]赋值,就会引发该异常。

2、这里容易出错

  “excel.ActiveWorkbook.SaveAs(FilePath + filename, Excel.XlFileFormat.xlExcel7, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);”

在上面代码保存的时候,格式很重要,每个版本的值都有所不同,最开始我在2007上另存成2003版本得到的是56(也就是xlExcel8),然而真正在代码中却是39(也就是xlExcel7)

导出和下载关键代码!(WebExcel.ashx.cs)

private void NAR(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
o = null;
}
} public void ExportExcel(HttpContext context, DataSet ds, string DownloadFilePath)
{ object objOpt = Missing.Value;
Application excel = new Application();
excel.Visible = false;
excel.DisplayAlerts = false;
Workbook wkb = excel.Workbooks.Add(objOpt);
Worksheet wks = (Worksheet)wkb.ActiveSheet; wks.Visible = XlSheetVisibility.xlSheetVisible; int rowIndex = ;
int colIndex = ; // DataTable table = ds.Tables[0];
foreach (DataColumn col in ds.Tables[].Columns)
{
colIndex++;
excel.Cells[, colIndex] = col.ColumnName;
} foreach (DataRow row in ds.Tables[].Rows)
{
rowIndex++;
colIndex = ;
foreach (DataColumn col in ds.Tables[].Columns)
{
colIndex++;
excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
}
}
//excel.Sheets[0] = "sss"; wkb.SaveAs(DownloadFilePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7, null, null, false, false, XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);
NAR(wks);
wkb.Close(false, objOpt, objOpt);
NAR(wkb);
excel.Quit();
NAR(excel); if (File.Exists(DownloadFilePath))
{ using (FileStream fs = new FileStream(DownloadFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
const int size = ;
byte[] buffer = new byte[size];
int pos = ;
long dataToRead = fs.Length;
long arrange = ;
if (context.Request.Headers["Range"] != null)
{
context.Response.StatusCode = ;
arrange = long.Parse(context.Request.Headers["Range"].Replace("bytes=", "").Replace("-", ""));
}
if (arrange != )
{
context.Response.AddHeader("Content-Range", "bytes " + arrange.ToString() + "-" + ((long)(dataToRead - )).ToString() + "/" + dataToRead.ToString());
}
context.Response.AddHeader("Content-Length", ((long)(dataToRead - arrange)).ToString());
//context.Response.ContentType = "application/octet-stream";
context.Response.ContentType = "application/ms-excel";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(System.Text.Encoding.GetEncoding().GetBytes(Path.GetFileName(DownloadFilePath)))); fs.Position = arrange;
dataToRead = dataToRead - arrange; while (dataToRead > )
{
if (context.Response.IsClientConnected)
{
pos = fs.Read(buffer, , size); context.Response.OutputStream.Write(buffer, , pos);
context.Response.Flush(); dataToRead = dataToRead - pos;
}
else
{
dataToRead = -;
}
}
}
} }

asp.net导出excel 问题及服务器的部署dcom组件配置的更多相关文章

  1. Asp.net导出Excel续章(自定义合并单元格,非Office组件)

    结合上次写的导出Excel方法,这次上头要求我将列头进行一下合并 以前的效果: 改进后的效果: 在上篇文章中写到了Excel的导出方法,这次为了避免在生产环境中使用Office组件,服务器各种权限配置 ...

  2. [转] Asp.Net 导出 Excel 数据的9种方案

    湛刚 de BLOG 原文地址 Asp.Net 导出 Excel 数据的9种方案 简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website ...

  3. asp.net导出excel并弹出保存提示框

    asp.net导出excel并弹出保存提示框 2013-07-12 | 阅:1  转:78   |  分享  腾讯空间 人人网 开心网 新浪微博 腾讯微博 搜狐空间 推荐给朋友 举报          ...

  4. asp.net导出excel示例代码

    asp.net导出excel的简单方法. excel的操作,最常用的就是导出和导入. 本例使用NPOI实现. 代码:/// <summary> );             ;       ...

  5. ASP.NET导出EXCEL类

    最新ASP.NET导出EXCEL类 说明:可以导出ASP.NET页面和DATAGRID(WebControl)数据,可以导出表单头 using System;using System.Data;usi ...

  6. Asp.net导出Excel乱码的解决方法

    通过跟踪Asp.net服务器代码,没有乱码,然而导出Excel到浏览器后,打开时出现乱码. 解决方法是添加编码格式的前缀字节码:Response.BinaryWrite(System.Text.Enc ...

  7. asp.net 导出Excel

    分享一个asp.net 导出假Excel代码.优点,不用借助于任何插件比如(NPOI),复制代码,修改grid.DataSource直接导出. 先看导出后的效果图 System.Web.UI.WebC ...

  8. ASP.NET导出excel表方法汇总

    asp.net里导出excel表方法汇总  1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...

  9. ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)

    网上提供了很多Asp.net中操作Excel的方法,其中大部分是调用微软的Office组件,下面提供三个无须安装Office即可从Asp.net输出Excel的方法. 1 简单方法 //下面代码输出的 ...

随机推荐

  1. php 找出异常发生的地方

    多层嵌套发生异常,找到异常最早发生的地方. final public int Exception::getLine ( void ) final public string Exception::ge ...

  2. ARKit从入门到精通(1)-ARKit初体验

    ARKit从入门到精通(1)-ARKit初体验 转载自:http://blog.csdn.net/u013263917/article/details/72903174 该系列文章共十篇,笔者将由易到 ...

  3. highcharts图表组件通过设置tooltip属性自定义数据提示信息

    我们先来看看这样一个例子,全局配置好tooltip,数据点的提示信息能够自己根据数据点自身数据情况加以显示,代码如下所示: 01.$(function () { 02.$('#container'). ...

  4. Redis提供的持久化机制(二)

    1.前言 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集 ...

  5. Introduction to MyBatis Generator Mybatis代码生成介绍

    Mybatis官方提供了代码生成工具,这里是官方网站: http://mybatis.github.io/generator/index.html 可以自动生成 Java POJOs, Mapper. ...

  6. 修复Windows10系统的注册表?

    在打开的管理员命令提示符窗口,输入如下命令: ———————————————————————————————— reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Mi ...

  7. VBA中数据库导出数据到Excel注意事项

    Sub ReadDBData() On Error GoTo ErrorHand Dim dbHelper As New dbHelper Dim sqlSQL As String Dim rs As ...

  8. linux用户和权限详解

    1.用户组说明 在使用useradd命令创建用户的时侯可以用-g 和-G 指定用户所属组和附属组.基本组:如果没有指定用户组,创建用户的时候系统会默认同时创建一个和这个用户名同名的组,这个组就是基本组 ...

  9. 莫衷一是——i+++j 该怎样计算?

    这是一个有趣的计算, 3 个加号相连.那么,究竟是怎样结合的呢?是依照: i + (++j)来运算,还是依照(i++) + j 来运算呢? 这个问题在相似于 C / C++中讨论是没有多大意义的,由于 ...

  10. 常用css3技巧

    H5移动前端开发常用高能css3汇总   1.禁止a标签点击高亮,这些都是非官方属性,但实用性超强   html,body{ -webkit-touch-callout: none; //禁止或显示系 ...