首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > ASP >

ASP和与excel相关组件的进解决思路

2013-10-21 
ASP和与excel相关组件的进ASPExcelaccess组件[解决办法]excel.application 的组件模型并不适合在asp里使用

ASP和与excel相关组件的进
ASP Excel access 组件
[解决办法]
excel.application 的组件模型并不适合在asp里使用。
可以考虑的方法:
1 在客户端用 WebOffice之类的组件在客户端操作excel, asp只负责传递数据和保存文件
2 如果用的是高版本的sql server,只需要导出数据的话,可以用openrowset之类的函数导出excel
3 用sa officewriter之类的,适合asp的组件
其他,考虑写服务或消息队列,用专门的程序处理Excel
[解决办法]
excel.application能在asp里用,并不代表适合于生产环境里使用,这是组件最初设计的特性决定的。
如果只是实验性质的,那用excel.application也行,一般问题都出在权限。 IIS内把此asp的执行帐号设置为Administrator的帐号。
WebOffice是在IE里执行的ActiveX组件,需要在客户端有Office, 作用相当于在客户端调用excel.application(如果直接在客户端调用excel.application也是有权限问题的。)
有专门的第三方组件是为操作excel设计的,用它就可以避免excel.application的问题。

[解决办法]
EXCEL读取与写入数据的最佳方案(个人认为)
分类: asp技巧 2013-03-13 12:53 44人阅读 评论(0) 收藏 编辑 删除
EXCEL读取与写入数据的最佳方案(个人认为)
在以往使用Excel文件时,我一般认为是使用COM组件进行EXCEL文档的操作,这样写程序即费时又费力(因为EXCEL组件没有帮助提示),写的程序还是大篇的重复代码。为什么为这样那?因为我们总是把一个EXCEL文件当做系统文件进行操作。
  如果把EXCEL文件当做一个数据源来进行数据的读取操作时,就可以使用开发环境提供的数据访问方法来访问EXCEL文件了。这样就可以使用开发环境的帮助(提示)即快速又不费力的来读取和写入数据到EXCEL中。这样的代码即整洁又高效,同时代码还可以得到复用。
下面的例子是使用.NET对EXCEL文件的读取和写入
示例的应用环境是从其它一个或多个EXCEL中读取数据,然后将多个数据写入到一个汇总的EXCEL(汇总的EXCEL文件只有表头没有数据)。前提是EXCEL文件内的结构是一样的。
Excel文件的读取
public DataSet ExcelToDS(string Path)
{
 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
 OleDbConnection conn = new OleDbConnection(strConn);
 conn.Open();  
 string strExcel = "";   
 OleDbDataAdapter myCommand = null;
 DataSet ds = null;
 strExcel="select * from [sheet1$]";
 myCommand = new OleDbDataAdapter(strExcel, strConn);


 ds = new DataSet();
 myCommand.Fill(ds,"table1");   
 return ds;
}
对于EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到
 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
 OleDbConnection conn = new OleDbConnection(strConn);
 DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);
 string tableName=schemaTable.Rows[0][2].ToString().Trim();  
Excel文件的写入
public void DSToExcel(string Path,DataSet oldds)
{
 //先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构
 string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path1+";Extended Properties=Excel 8.0" ;
 OleDbConnection myConn = new OleDbConnection(strCon) ;
 string strCom="select * from [Sheet1$]";
 myConn.Open ( ) ;
 OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ;
 ystem.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand);
 //QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。
 builder.QuotePrefix="[";     //获取insert语句中保留字符(起始位置)
 builder.QuoteSuffix="]"; //获取insert语句中保留字符(结束位置)
 DataSet newds=new DataSet();
 myCommand.Fill(newds ,"Table1") ;
 for(int i=0;i<oldds.Tables[0].Rows.Count;i++)
 {
  //在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added
  DataRow nrow=aDataSet.Tables["Table1"].NewRow();
  for(int j=0;j<newds.Tables[0].Columns.Count;j++)
  {
   nrow[j]=oldds.Tables[0].Rows[i][j];
  }
  newds.Tables["Table1"].Rows.Add(nrow);
 }
 myCommand.Update(newds,"Table1");
 myConn.Close();
}
[解决办法]
  excel在实际中,还有大量应用,今天就拿到一堆的excel文件,需要对里面的数据做下读取另作他用,这里就涉及到了asp遍历excel的所有表名。
代码如下:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
dim conn,rs,excelFileName
excelFileName=Server.MapPath("Data/test.xls")
set conn = Server.CreateObject("ADODB.Connection")
conn.connectionstring="Provider=Microsoft.Jet.OleDb.4.0;Persist Security Info=True;Data Source=" & excelFileName & ";Extended ProPerties=""Excel 8.0;HDR=Yes;IMEX=1"";"


conn.open()
set rs=conn.OpenSchema(20)
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Excel操作</title>
</head>

<body>
<%
dim i
response.write("Excel表信息字段:<br />------------------------<br />")
for i=0 to rs.fields.count-1 step 1
response.write(rs.fields(i).name&"<br />")
next
response.write("<br />Excel中的表名(Table_Name):<br />------------------------<br />")
while not rs.EOF
response.write(rs("Table_Name")&"<br />")
rs.movenext
wend
%>
</body>
</html>  
[解决办法]

引用:
Quote: 引用:

  excel在实际中,还有大量应用,今天就拿到一堆的excel文件,需要对里面的数据做下读取另作他用,这里就涉及到了asp遍历excel的所有表名。
代码如下:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
dim conn,rs,excelFileName
excelFileName=Server.MapPath("Data/test.xls")
set conn = Server.CreateObject("ADODB.Connection")
conn.connectionstring="Provider=Microsoft.Jet.OleDb.4.0;Persist Security Info=True;Data Source=" & excelFileName & ";Extended ProPerties=""Excel 8.0;HDR=Yes;IMEX=1"";"
conn.open()
set rs=conn.OpenSchema(20)
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Excel操作</title>
</head>

<body>
<%
dim i
response.write("Excel表信息字段:<br />------------------------<br />")
for i=0 to rs.fields.count-1 step 1
response.write(rs.fields(i).name&"<br />")
next
response.write("<br />Excel中的表名(Table_Name):<br />------------------------<br />")
while not rs.EOF
response.write(rs("Table_Name")&"<br />")
rs.movenext
wend
%>
</body>
</html>  

这位兄台,首先挺感谢你回复我的信息,并给与的一些方法,这些我之前也有了解,但现在问题是excel表是非常规的,不规则的,不像数据库表,你看看下面我再百度知道上问的这道题http://zhidao.baidu.com/question/554164885?quesup2&oldq=1。我希望你如果有好的建议或者一些解决excel.application创建问题的解决之道,烦请告诉我,谢谢啊,或者别的解决方法也行,呵呵。本来有点放弃啦,不过看到大虾们有回复,又燃起斗志啊。

ASP和与excel相关组件的进解决思路




asp程序的server.createObject("excel.application")错误解决
开始->运行->dcomcnfg
找到"Microsoft Excel 应用程序"(这个名称取决于你调用的Object是什么),然后右键->Properties->security把三个权限都给everyone即可,其实第一个Launch & activate即可
[解决办法]
'-----------------测试代码:
dim obje
Set obje=server.CreateObject("Excel.Application")
obje.DisplayAlerts=False 
obje.Application.Visible=false
obje.quit
set obje=Nothing
---------------------
我的机器上通过.么有问题哦.

热点排行