精品技术论坛

精品技术论坛 (https://bbs.et8.net/bbs/index.php)
-   『软件使用』 (https://bbs.et8.net/bbs/forumdisplay.php?f=17)
-   -   【新问题】如何批量读简历表(EXCEL),形成汇总表(字符串溢出) (https://bbs.et8.net/bbs/showthread.php?t=1029611)

Notrue 2012-04-24 15:50:59

【新问题】如何批量读简历表(EXCEL),形成汇总表(字符串溢出)
 
领导做了一个报名表(EXCEL)给各下属部门,现在纷纷报上来了。

1、每人一个EXCEL文件
2、每个文件的格式都一样,主要就是姓名、年龄、学历之类的
3、批量汇总成一张汇总表

用VBA脚本或者什么工具软件能搞定吗?


--------------------------

SPARK 的脚本非常好用,超级强大啊。学习了。

BUT,有一个问题,就是有些单元格内容比较多的时候(超过256个字)就会出现 ExecuteExcel4Macro _Global 错误,如何解决?

DBDG 2012-04-24 20:32:11

试试:Excel汇总专家5.0

这个版不好给下载,GG下好了

Spark 2012-04-24 21:48:19

VBA,你發一張上來,指出 你要匯總那幾個字段,我給你看看

samson88 2012-04-24 21:48:27

这里有个视频教程很详细

http://fpbd032.blog.163.com/blog/sta...0761935141177/

Notrue 2012-04-25 08:35:59

1 个附件
引用:

作者: Spark (文章 10960631)
VBA,你發一張上來,指出 你要匯總那幾個字段,我給你看看

大侠帮搞定啊!


PS,那个汇总专家试了,好像不是我要的功能啊.......他只能把多个EXCEL文件的内容叠加而已。比如n张表里面都有张三的成绩,它可以根据模版把张三的总成绩加出来而已。

Notrue 2012-04-25 08:50:14

引用:

作者: samson88 (文章 10960632)
这里有个视频教程很详细

http://fpbd032.blog.163.com/blog/sta...0761935141177/

这个视频里面的功能也是数据总加.....而且视频里面没有VBA的具体写法...只是演示而已...

Spark 2012-04-25 12:13:13

1 个附件
Excel 2003,打开宏设置-可运行
把你的报名表复制到一个文件夹,比如“2012报名表”
打开附件里的Excel文件,点第一个 Show按钮,弹出对话框,选择"2012报名表"这个文件夹。获取2012报名表下所有文件的FileName
点击第二个按钮-Get,自动获取你需要的内容

忘了改列宽,按钮在屏幕偏右的位置F列处

你没有说要哪几个字段,我只是把你贴上来红色的部分统计了

Notrue 2012-05-02 11:39:52

不好意思,上周出差了,一直没空试这个脚本。今天早上用上了,非常好用,超级强大啊。学习了。

BUT,有一个问题,就是有些单元格内容比较多的时候(超过256个字)就会出现 ExecuteExcel4Macro _Global 错误,如何解决?

感谢Spark!!!

Spark 2012-05-02 13:49:31

用Ado连接也是有超过256字符被截断的问题
http://support.microsoft.com/kb/189897/EN-US/

Notrue 2012-05-02 17:45:07

谢谢,那只能认为是MS VBA的缺陷了....

如果能分两次读就好了,呵呵。

Spark 2012-05-02 23:12:12

楼主修改一下注册表试试。我没有用Ado引擎读取数据,不知道是否有效

原来,ODBC在读取Excel时,会有个值设置TypeGuessRows=8, 意思是ODBC会先在前8行的数据中去比较,如果所有的数据都在255或以下,那这个字段长度就是varchar(255),否则,这个字段将是text类型。

于是,我们加上TypeGuessRow=100,再试,结果错误依然存在。

原来,虽然可以设置这个属性,但ODBC是不会去用它的,要使这个属性有效,必须修改注册表。对于注册表键是

• Excel 97
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel
• Excel 2000 and later versions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

修改了里面的TypeGuessRow后,这个问题暂时解决了。

但是,如果大的数据在表的后面位置的话,这个问题还是有可能发生的。所以要彻底的解决的话,在打开一个recordset前,就要先定义好它的字段长度了。

tbiyt 2012-05-03 23:04:39

试试excel百宝箱9.0吧 功能很强大
还有教程
http://excelbbx.net/Excel/index.htm
左边找到 工作簿汇总 记得不要选同名工作表的数据合并到同表中

lee1892 2012-05-07 10:46:06

1 个附件
引用:

作者: Spark (文章 10960828)
Excel 2003,打开宏设置-可运行
把你的报名表复制到一个文件夹,比如“2012报名表”
打开附件里的Excel文件,点第一个 Show按钮,弹出对话框,选择"2012报名表"这个文件夹。获取2012报名表下所有文件的FileName
点击第二个按钮-Get,自动获取你需要的内容

忘了改列宽......

看了一下代码
1、取得目录下文件列表的循环 For i = 2 To .FoundFiles.Count,为什么是从第2个文件开始?估计写代码的时候,GetData.xls这个文件在同一目录下。那么你上面这个运行方法的描述有问题,即便是也放到一个目录里,代码还利用了文件名造成的顺序。楼主要注意这个。
2、比较奇怪为什么要用Excel4.0的宏调用这个函数,在我的理解Excel4.0宏函数是完全可以淘汰的东西。仅仅是把单元格内容复制出来而已啊...

不用那么麻烦,还要改什么注册表吧:)

============================
闲得蛋疼,写了一个,放到简历表同一目录下打开执行。

代码如下:
PHP 代码:

Sub GetData()
    
Dim iFile As IntegeriItem As IntegerintRowNow As Integer
    Dim arrData
()
    
Dim arrItem()
    
    
'清空原有数据提示'
    
If MsgBox("此操作将清除原有数据,是否继续?"vbYesNo"提示") = vbNo Then Exit Sub
    
If [B65536].End(xlUp).Row 3 Then
        Rows
("4:" & [B65536].End(xlUp).Row).Delete
    End 
If
    
ReDim arrData(1 To 11 To [IV2].End(xlToLeft).Column)
    
arrItem Range("B3").Resize(1UBound(arrData2) - 1)
    
intRowNow 4
    
'查找同目录下Excel文件,并逐个读取数据并写入合并文件'
    
With Application.FileSearch
        
.NewSearch
        
.LookIn ThisWorkbook.Path
        
.FileType msoFileTypeExcelWorkbooks
        
.SearchSubFolders True
        
.Execute
        
For iFile 1 To .FoundFiles.Count
            
If .FoundFiles(iFile) = ThisWorkbook.FullName Then GoTo NEXT_I
            Application
.Workbooks.Open .FoundFiles(iFile)
            
arrData(11) = Right(.FoundFiles(iFile), Len(.FoundFiles(iFile)) - Len(ThisWorkbook.Path) - 1)
            For 
iItem 1 To UBound(arrItem2)
                
arrData(1iItem 1) = Workbooks(arrData(11)).Sheets(1).Range(arrItem(1iItem))
            
Next
            Workbooks
(arrData(11)).Close
            Range
("A" intRowNow).Resize(1UBound(arrData2)) = arrData
            intRowNow 
intRowNow 1
NEXT_I
:
        
Next
    End With
End Sub 


Spark 2012-05-07 14:12:19

复楼上
因为我用多年前写的脚本改了一下

Notrue 2012-05-07 16:35:15

lee1892、SPARK等各位热心坛友,太感谢了!


所有时间均为北京时间, 现在的时间是 18:08:43.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号