ASP能否实现EXCEL数据和ACCESS数据对比,如身份证,并在输入的EXCEL中做好重复条目的标记!

小小的油条 2014-10-08 04:48:34
ASP + ACCESS

总表在ACCESS中,

比如我有一个EXCEL文件,身份证列为 SFZ ACCESS 总表的身份证列也是 SFZ

在ASP页面中上传XCEL文件,开始对比,然后找出EXCEL和ACCESS 重复的SFZ 的项目,并在EXCEL文件中作好标记,比如加颜色,然后导出这个做过重复标记的EXCEL~

我想的没办法中的办法,就是先导入EXCEL文件 到ACCESS 一个新表里,然后2个表比较,然后在输出EXCEL,但是这样顺序都乱掉了,比较之麻烦,求高人解决!!!!
...全文
480 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
itzhiren 2014-10-11
  • 打赏
  • 举报
回复
典型的新手提问方式,一步一步,大家都帮忙把代码写出来了,呵呵,不过谁都是从新手过来的,加油
三楼の郎 2014-10-11
  • 打赏
  • 举报
回复
1.看清楚8楼的SQL语句是用Union连接的两条SQL查询 结果列为1的是重复的,结果列为0的是不重复的,遍历recordset直接判断结果列的值就可以知道重复不重复了。 2.通过vend.ms-excel这种方式输出的本来就是html格式的,只不过这种html格式的文档用excel打开后和excel文档看起来差不多而已,所以简单处理的话可以直接这么用,如果必须用excel文档那就得在服务器上生成excel文档再下载
save4me 2014-10-10
  • 打赏
  • 举报
回复
关于ADODB Recordset,参考: ADO Recordset 对象
save4me 2014-10-10
  • 打赏
  • 举报
回复
首先,把你的SQL语句改成下面的,通过LEFT JOIN这样的话你就可以获取所有EXCEL表格里面的数据

rs.Open "SELECT T1.*,IIF(T2.sfzhm <> NULL, 1, 0) AS IsExist FROM [Excel 8.0;Database="&server.mappath("xls/2014109142819586.xls")&";HDR=YES].[Sheet1$] AS T1 LEFT JOIN cn_peixun AS T2 ON T1.SFZ = T2.sfzhm", conn, 1, 1
第二,可以通过 rs.Fields获取列信息

   <thead>
      <tr>
         <%For Each fld in rs.Fields%>
           <th><span><%=Server.HTMLEncode(fld.Name)%></span></th>
         <%Next %>
      </tr>
   </thead>
第三,通过判断IsExist是否为1,给你的td添加样式style="color: red; font-weight: bold"
小小的油条 2014-10-10
  • 打赏
  • 举报
回复

<%
response.ContentType   ="application/vnd.ms-excel; charset=GB2312"  
response.Addheader   "Content-Disposition", "attachment;Filename=" & date() & ".xls"  
response.Charset   =   "GB2312" 
dim conn,rs
set conn=server.createobject("adodb.connection")

Const DB_BASE = "DataBase/#Yi_Wang_Xun_C_Base.mdb"	 	'数据库名
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath(""&DB_BASE&"")
set rs=server.createobject("adodb.recordset")
rs.open "select a.*,1 as 结果 from [excel 8.0;database="&server.mappath("xls/2014109142819586.xls")&"].[sheet1$] as a where 身份证  in (select sfzhm from cn_peixun) ",conn,1,1
%>
<table  width=90% border=0 align=center ID="Table2" cellpadding=1 cellspacing=1>
<tr>
<td>身份证</td>
</tr> 
<% DO WHILE Not rs.eof %>
<tr>
<td style="vnd.ms-excel.numberformat:@"><%=rs(1)%></a></td>
</tr>
 <%
rs.movenext
loop
rs.close
conn.close
%>
代码贴上来,请高人解决,可以页面上显示,也可以导出EXCEL 有2个问题 1、如果在页面返回,如何显示 导入进来拿个EXCEL 所有列呢? 如果我不知道的话,RS(0)..RS(1) 不知道要写几个。 2、能否按照导入进来的那个EXCEL格式,在上面做好重复标记,下载下来,比如说我导入10条的EXCEL表,导出还是10条,在重复身份证记录上做好记号,比如加粗,变红。 求教!
小小的油条 2014-10-10
  • 打赏
  • 举报
回复
引用 15 楼 showbo 的回复:
server.mappath将虚拟路劲转为物理路径就好了。。 rs.open "select a.*,1 as 结果 from [excel 8.0;database="&server.mappath("xxxxx.xls")&"].[sheet1] as a where SFZ in (select sfz from 表) ",conn,1,1
我循环下面 rs(0),rs(1) 能显示出来,但是能否根据导入的EXCEL列数来分配?
小小的油条 2014-10-10
  • 打赏
  • 举报
回复
引用 15 楼 showbo 的回复:
server.mappath将虚拟路劲转为物理路径就好了。。 rs.open "select a.*,1 as 结果 from [excel 8.0;database="&server.mappath("xxxxx.xls")&"].[sheet1] as a where SFZ in (select sfz from 表) ",conn,1,1
你好,版主,如果上面能用了 a*,1 as 结果 我下面的循环语句,如何读出结果的列呢??就是EXCEL文件中详细的全部列信息反馈出来
Go 旅城通票 2014-10-10
  • 打赏
  • 举报
回复
server.mappath将虚拟路劲转为物理路径就好了。。 rs.open "select a.*,1 as 结果 from [excel 8.0;database="&server.mappath("xxxxx.xls")&"].[sheet1] as a where SFZ in (select sfz from 表) ",conn,1,1
小小的油条 2014-10-10
  • 打赏
  • 举报
回复
引用 12 楼 jjwalker 的回复:
[quote=引用 11 楼 CityBird 的回复:] select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) 这不过就是一条SQL语句,和ASP有毛线关系 dim conn,rs set conn=server.createobject("adodb.connection") conn.open "打开Access连接字符串" set rs=server.createobject("adodb.recordset") rs.open "select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) ",conn,1,1 ………… d:\123.xls是上传的EXCEL文件在服务器上的绝对路径,sheet1是EXCEL里面工作表的名字,也可能是用sheet1$,能用不能用试下不就知道了,excel 8.0貌似只能打开Office 2003及以下版本的
感谢大神!我试试去![/quote]
引用 11 楼 CityBird 的回复:
select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) 这不过就是一条SQL语句,和ASP有毛线关系 dim conn,rs set conn=server.createobject("adodb.connection") conn.open "打开Access连接字符串" set rs=server.createobject("adodb.recordset") rs.open "select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) ",conn,1,1 ………… d:\123.xls是上传的EXCEL文件在服务器上的绝对路径,sheet1是EXCEL里面工作表的名字,也可能是用sheet1$,能用不能用试下不就知道了,excel 8.0貌似只能打开Office 2003及以下版本的
可以了,还有2个问题 1.EXCEL 能虚拟路径吗? 2.response.write rs("结果") 为1 但是我重复的不止1
小小的油条 2014-10-10
  • 打赏
  • 举报
回复
引用 11 楼 CityBird 的回复:
select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) 这不过就是一条SQL语句,和ASP有毛线关系 dim conn,rs set conn=server.createobject("adodb.connection") conn.open "打开Access连接字符串" set rs=server.createobject("adodb.recordset") rs.open "select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) ",conn,1,1 ………… d:\123.xls是上传的EXCEL文件在服务器上的绝对路径,sheet1是EXCEL里面工作表的名字,也可能是用sheet1$,能用不能用试下不就知道了,excel 8.0貌似只能打开Office 2003及以下版本的
Microsoft Jet 数据库引擎找不到对象'sheet1' 而且,XLS地址一定要用绝对路径吗?在虚拟主机貌似不能啊
小小的油条 2014-10-10
  • 打赏
  • 举报
回复
引用 11 楼 CityBird 的回复:
select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) 这不过就是一条SQL语句,和ASP有毛线关系 dim conn,rs set conn=server.createobject("adodb.connection") conn.open "打开Access连接字符串" set rs=server.createobject("adodb.recordset") rs.open "select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) ",conn,1,1 ………… d:\123.xls是上传的EXCEL文件在服务器上的绝对路径,sheet1是EXCEL里面工作表的名字,也可能是用sheet1$,能用不能用试下不就知道了,excel 8.0貌似只能打开Office 2003及以下版本的
感谢大神!我试试去!
小小的油条 2014-10-10
  • 打赏
  • 举报
回复
引用 25 楼 save4me 的回复:
第一个问题,21行你看看是否会出错,出错的话你改成rs.Fields(i).Name。 第二个个问题,把输出行数据的那块代码改成下面的试试

            <%
            For i = 0 to l
            %>
            <td<%If rs(i+1) = 1 AND Server.HTMLEncode(rs.Fields(i).Name) = "身份证" Then%> style="color: red; font-weight: bold;"<%End If%>><%=rs(i)%></td>
            <%
            Next
            %>
因为你刚开始用了vnd.ms-excel.numberformat:@;,可能是为了防止输出的身份证号被当作数字,所以要格式化成字符格式。改的时候忘记判断列是不是身份证号这一列了。这回再试试。
可以了,请问下,这个方法导出的EXCEL文件老是提示不安全,但是可以打开,我打开其他EXCEL无任何提示,而且保存下来的XLS是IE图标,要在EXCEL中再保存一下,才会显示EXCEL图标,但还是提示风险,是否导出的EXCEL格式不标准??求解答
save4me 2014-10-10
  • 打赏
  • 举报
回复
第一个问题,21行你看看是否会出错,出错的话你改成rs.Fields(i).Name。 第二个个问题,把输出行数据的那块代码改成下面的试试

            <%
            For i = 0 to l
            %>
            <td<%If rs(i+1) = 1 AND Server.HTMLEncode(rs.Fields(i).Name) = "身份证" Then%> style="color: red; font-weight: bold;"<%End If%>><%=rs(i)%></td>
            <%
            Next
            %>
因为你刚开始用了vnd.ms-excel.numberformat:@;,可能是为了防止输出的身份证号被当作数字,所以要格式化成字符格式。改的时候忘记判断列是不是身份证号这一列了。这回再试试。
小小的油条 2014-10-10
  • 打赏
  • 举报
回复
引用 21 楼 save4me 的回复:

<%
Response.ContentType   ="application/vnd.ms-excel; charset=GB2312"  
Response.Addheader   "Content-Disposition", "attachment;Filename=" & date() & ".xls"  
Response.Charset   =   "GB2312" 
DIM conn, rs
SET conn = Server.CreateObject("adodb.connection")

Const DB_BASE = "DataBase/#Yi_Wang_Xun_C_Base.mdb"	 	'数据库名
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(DB_BASE)
SET rs = Server.CreateObject("adodb.recordset")
rs.Open "SELECT T1.*,IIF(T2.sfzhm <> NULL, 1, 0) AS 结果 FROM [Excel 8.0;Database= "& Server.MapPath("xls/2014109142819586.xls") & ";HDR=YES].[Sheet1$] AS T1 LEFT JOIN cn_peixun AS T2 ON T1.身份证 = T2.sfzhm", conn, 1, 1
%>
<table width=90% border=0 align=center ID="Table2" cellpadding=1 cellspacing=1>
    <thead>
        <tr>
			<%
			DIM i, l
			l = rs.Fields.Count - 1 '不导出最后一列(是否重复)
			For i = 0 to l
			%>
            <th><%=Server.HTMLEncode(rs.Fields[i].Name)%></th>
            <%
			Next
			%>
        </tr>
    </thead>
    <tbody>
	<%
	Do While Not rs.Eof
	%>
	<tr>
			<%
			For i = 0 to l
			%>
            <td style="<%If rs(i+1) = 1 Then%> color: red; font-weight: bold; vnd.ms-excel.numberformat:@;"<%End If%>><%=rs(i)%></td>
            <%
			Next
			%>
	</tr>
	<%
    rs.MoveNext
    Loop
	%>
    </tbody>
    rs.Close
    conn.Close
    %>
</table>
你好感谢你的代码,现在有2个小问题,望帮忙 1、21行 <th><%=Server.HTMLEncode(rs.Fields[i].Name)%></th> [i] 是否要换成(i) 2、35行出错 <td style="<%If rs(i+1) = 1 Then%> color: red; font-weight: bold; vnd.ms-excel.numberformat:@;"<%End If%>><%=rs(i)%></td> 出错代码: Microsoft VBScript 运行时错误 错误 '800a000d' 类型不匹配: '[string: "黄金成"]'
小小的油条 2014-10-10
  • 打赏
  • 举报
回复
引用 21 楼 save4me 的回复:

<%
Response.ContentType   ="application/vnd.ms-excel; charset=GB2312"  
Response.Addheader   "Content-Disposition", "attachment;Filename=" & date() & ".xls"  
Response.Charset   =   "GB2312" 
DIM conn, rs
SET conn = Server.CreateObject("adodb.connection")

Const DB_BASE = "DataBase/#Yi_Wang_Xun_C_Base.mdb"	 	'数据库名
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(DB_BASE)
SET rs = Server.CreateObject("adodb.recordset")
rs.Open "SELECT T1.*,IIF(T2.sfzhm <> NULL, 1, 0) AS 结果 FROM [Excel 8.0;Database= "& Server.MapPath("xls/2014109142819586.xls") & ";HDR=YES].[Sheet1$] AS T1 LEFT JOIN cn_peixun AS T2 ON T1.身份证 = T2.sfzhm", conn, 1, 1
%>
<table width=90% border=0 align=center ID="Table2" cellpadding=1 cellspacing=1>
    <thead>
        <tr>
			<%
			DIM i, l
			l = rs.Fields.Count - 1 '不导出最后一列(是否重复)
			For i = 0 to l
			%>
            <th><%=Server.HTMLEncode(rs.Fields[i].Name)%></th>
            <%
			Next
			%>
        </tr>
    </thead>
    <tbody>
	<%
	Do While Not rs.Eof
	%>
	<tr>
			<%
			For i = 0 to l
			%>
            <td style="<%If rs(i+1) = 1 Then%> color: red; font-weight: bold; vnd.ms-excel.numberformat:@;"<%End If%>><%=rs(i)%></td>
            <%
			Next
			%>
	</tr>
	<%
    rs.MoveNext
    Loop
	%>
    </tbody>
    rs.Close
    conn.Close
    %>
</table>
非常感谢!!!!!我试试!!!再摸摸!
小小的油条 2014-10-10
  • 打赏
  • 举报
回复
引用 19 楼 save4me 的回复:
首先,把你的SQL语句改成下面的,通过LEFT JOIN这样的话你就可以获取所有EXCEL表格里面的数据

rs.Open "SELECT T1.*,IIF(T2.sfzhm <> NULL, 1, 0) AS IsExist FROM [Excel 8.0;Database="&server.mappath("xls/2014109142819586.xls")&";HDR=YES].[Sheet1$] AS T1 LEFT JOIN cn_peixun AS T2 ON T1.SFZ = T2.sfzhm", conn, 1, 1
第二,可以通过 rs.Fields获取列信息

   <thead>
      <tr>
         <%For Each fld in rs.Fields%>
           <th><span><%=Server.HTMLEncode(fld.Name)%></span></th>
         <%Next %>
      </tr>
   </thead>
第三,通过判断IsExist是否为1,给你的td添加样式style="color: red; font-weight: bold"
非常感谢,本人菜鸟一个,摸了半天 <%=Server.HTMLEncode(fld.Name)%>是能读出列,但是我如何以画表格形式输出页面呢?
save4me 2014-10-10
  • 打赏
  • 举报
回复

<%
Response.ContentType   ="application/vnd.ms-excel; charset=GB2312"  
Response.Addheader   "Content-Disposition", "attachment;Filename=" & date() & ".xls"  
Response.Charset   =   "GB2312" 
DIM conn, rs
SET conn = Server.CreateObject("adodb.connection")

Const DB_BASE = "DataBase/#Yi_Wang_Xun_C_Base.mdb"	 	'数据库名
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(DB_BASE)
SET rs = Server.CreateObject("adodb.recordset")
rs.Open "SELECT T1.*,IIF(T2.sfzhm <> NULL, 1, 0) AS 结果 FROM [Excel 8.0;Database= "& Server.MapPath("xls/2014109142819586.xls") & ";HDR=YES].[Sheet1$] AS T1 LEFT JOIN cn_peixun AS T2 ON T1.身份证 = T2.sfzhm", conn, 1, 1
%>
<table width=90% border=0 align=center ID="Table2" cellpadding=1 cellspacing=1>
    <thead>
        <tr>
			<%
			DIM i, l
			l = rs.Fields.Count - 1 '不导出最后一列(是否重复)
			For i = 0 to l
			%>
            <th><%=Server.HTMLEncode(rs.Fields[i].Name)%></th>
            <%
			Next
			%>
        </tr>
    </thead>
    <tbody>
	<%
	Do While Not rs.Eof
	%>
	<tr>
			<%
			For i = 0 to l
			%>
            <td style="<%If rs(i+1) = 1 Then%> color: red; font-weight: bold; vnd.ms-excel.numberformat:@;"<%End If%>><%=rs(i)%></td>
            <%
			Next
			%>
	</tr>
	<%
    rs.MoveNext
    Loop
	%>
    </tbody>
    rs.Close
    conn.Close
    %>
</table>
三楼の郎 2014-10-09
  • 打赏
  • 举报
回复
1.上传excel文件,这个我就不多说了 2. 用ADO连接ACCESS,这个我也不多说了 3. 通过 select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) union select a.*,0 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ not in (select sfz from 表) 获取比对的结果,最好在外面再套个 select 排下序,select * from () as x order by 序号列,确保输出的excel与原excel顺序相同 4.把这个结果输出成xls,这个我也不多说了,简单的就是找个xls文档另存成htm格式然后加上response.ContentType="application/vnd.ms-excel;就好了。
三楼の郎 2014-10-09
  • 打赏
  • 举报
回复
select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) 这不过就是一条SQL语句,和ASP有毛线关系 dim conn,rs set conn=server.createobject("adodb.connection") conn.open "打开Access连接字符串" set rs=server.createobject("adodb.recordset") rs.open "select a.*,1 as 结果 from [excel 8.0;database=d:\123.xls].[sheet1] as a where SFZ in (select sfz from 表) ",conn,1,1 ………… d:\123.xls是上传的EXCEL文件在服务器上的绝对路径,sheet1是EXCEL里面工作表的名字,也可能是用sheet1$,能用不能用试下不就知道了,excel 8.0貌似只能打开Office 2003及以下版本的
小小的油条 2014-10-09
  • 打赏
  • 举报
回复
引用 6 楼 jjwalker 的回复:
[quote=引用 4 楼 CityBird 的回复:] Excel里面增加一个序号列和一个核对结果列,然后导入Access比对,比对结果更新到比对结果列里面,比对完成再导出Excel,导出时按序号列排序
我想法是通过 上传EXCEL 然后比对,然后直接弹出比对结果的EXCEL ,不知道过程如何操作,这样最好!
加载更多回复(8)

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧