主题:[讨论]求助关于vf 中 表格互相引用问题
asasbs
[专家分:0] 发布于 2010-09-26 14:00:00
我有200个EXECL表每个表都有一个唯一的编号,需要利用vf 软件编程 通过一个界面输入10个左右的编号之后吧这10个表格内容放到一个新表中,我应该如何编程??注意:每天这些编号的内容都是不一样的。
回复列表 (共4个回复)
沙发
sywzs [专家分:5650] 发布于 2010-09-26 15:59:00
说的不是很清楚。
1、是200个EXCEL工作簿,还是一个工作簿中包含了200个工作表?
2、每个工作表的表头部分是否相同?
3、数据行是从那行开始的?
4、新表指的是DBF表,还是EXCEL工作表?
板凳
asasbs [专家分:0] 发布于 2010-09-27 12:10:00
1.200个execl工作簿
2。表头相同
3。数据行从第一行开始
4。是execl表
3 楼
sywzs [专家分:5650] 发布于 2010-09-28 17:14:00
两个方案,大同小异。
第一个方案:把EXCEL数据提取到临时表中,然后再存成新的EXCEL表。
CREATE CURSOR TMP(A1 c(12),A2 c(10),A3 c(20),A4 c(30),A5 c(20),A6 c(20),A7 n(9,2),A8 d) &&根据数据结构创建临时表
nCols=FCOUNT()
DIMENSION SJ(nCols)
cSTR="INSERT INTO TMP("
cSTR1=" Value("
FOR I=1 TO nCols
cSTR=cSTR+IIF(I=1,"",",")+FIELD(I)
cSTR1=cSTR1+IIF(I=1,"",",")+"SJ("+ALLTRIM(STR(I))+")"
NEXT
cSTR=cSTR+")"+cSTR1+")"
oExcel=Createobject("Excel.application")
nBS=1
YHS=0
DO WHILE .T.
fName=Getfile("xls","第 "+ALLTRIM(STR(nBS))+" 个工作表",'确定',0,"选择要打开的 EXCEL 工作簿")
IF EMPTY(fName)
EXIT
ENDIF
oExcel.Workbooks.Open(fName)
nRows=oExcel.SHEETS(1).UsedRange.Rows.Count
FOR nR=2 TO nRows
FOR nC=1 TO nCols
SJ(nC)=oExcel.SHEETS(1).cells(nR,nC).VALUE
NEXT
&cSTR
NEXT
YHS=YHS+nROWS-1
nBS=nBS+1
ENDDO
oExcel.Workbooks.close
oExcel.quit
SELECT TMP
PName=PUTFILE("文件名","总表","xls")
COPY TO (PName) xl5
* 1、以上代码需要修改第1行临时表的字段名、类型和长度;
* 2、确保每个源表的第一行为标题行,从第二行开始为有效数据行;
* 3、程序运行后要求依次打开每一个源表,并读取数据,按“取消”结束数据读取;
* 4、在另存为对话框中修改要保存的文件名及路径。
*******************
第二个方案:把源表中的数据直接写入新表中。
eole=CREATEOBJECT('Excel.application') && 创建Excel对象
eole.Workbooks.add && 添加新工作簿
nBS=1
YHS=0
DO WHILE .T.
oExcel=Createobject("Excel.application") && 创建Excel对象
XlsName=Getfile("xls","打开第"+ALLTRIM(STR(nBS))+"个表",'确定',0,"选择 EXCEL 工作簿")
IF EMPTY(XlsName)
EXIT
ENDIF
oExcel.Workbooks.Open(XlsName)
nrows=oExcel.SHEETS(1).UsedRange.Rows.Count && 行数
ncols=oExcel.SHEETS(1).UsedRange.Columns.Count && 列数
IF nBS=1
FOR nC=1 TO nCols && 读写标题行
eole.SHEETS(1).cells(1,nC)=ALLTRIM(oExcel.SHEETS(1).cells(1,nC).VALUE)
NEXT
eole.ActiveSheet.Range("A1:C65536").NumberFormatLocal = "@"
eole.ActiveSheet.Range("F1:F65536").NumberFormatLocal = "@"
*** 以上两行假设第一列至第三列和第六列都是字符型数据,为避免数字字符变成数值型。
ENDIF
FOR nR=2 TO nROWS
FOR nC=1 TO nCols
eole.SHEETS(1).cells(nR+YHS,nC)=oExcel.SHEETS(1).cells(nR,nC).VALUE
NEXT
NEXT
YHS=YHS+nROWS-1
nBS=nBS+1
ENDDO
oExcel.Workbooks.close && 关闭工作簿
oExcel.quit && 退出Excel
eole.visible=.T.
* 1、为避免数字字符变为数值型,需指定某些列是字符型数据;
* 2、程序运行后要求依次打开每一个源表,并读取数据,按“取消”结束数据读取;
* 3、保存新表。
4 楼
C易特联盟 [专家分:60] 发布于 2010-10-03 22:56:00
最新互助式项目。
这是一个互助的模式。
不推广人也有钱赚的。分A B两个网。
不推广的人在A网。推广的人 在B网。
B网推广的人帮助A网。
A网赚取6000元出局。
B网就多了。
详情了解加QQ919169870
http://blog.sina.com.cn/s/blog_6b19ec920100liv6.html
C易特奖励制度
http://blog.sina.com.cn/cyite6
C易特更多资料博客
我来回复