回 帖 发 新 帖 刷新版面

主题:[讨论]求助关于vf 中 表格互相引用问题

我有200个EXECL表每个表都有一个唯一的编号,需要利用vf 软件编程 通过一个界面输入10个左右的编号之后吧这10个表格内容放到一个新表中,我应该如何编程??注意:每天这些编号的内容都是不一样的。

回复列表 (共4个回复)

沙发

说的不是很清楚。
1、是200个EXCEL工作簿,还是一个工作簿中包含了200个工作表?
2、每个工作表的表头部分是否相同?
3、数据行是从那行开始的?
4、新表指的是DBF表,还是EXCEL工作表?

板凳

1.200个execl工作簿
2。表头相同
3。数据行从第一行开始
4。是execl表

3 楼

两个方案,大同小异。
第一个方案:把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 楼

最新互助式项目。
这是一个互助的模式。
不推广人也有钱赚的。分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易特更多资料博客

我来回复

您尚未登录,请登录后再回复。点此登录或注册