原文地址:http://blog.chinaunix.net/uid-20586802-id-3235549.html

/*****************简单的导入功能,涉及到数据类型判断*****************/

string ls_path,ls_name,ls_filter
integer li_ret
long ll_rows,ll_columns
string a[1000,100]  //导入数据行数最大1000行,列数最大100列
ls_filter = "Excel文件(*.xls),*.xls"
li_ret = GetFileOpenName("请选择后缀名为XLS的文件",ls_path,ls_name,"xls",ls_filter)
if li_ret <> 1 then return

//建立OLE对象
OLEObject ExcelServer
ExcelServer = create OLEObject
integer li_excel
li_excel = ExcelServer.ConnectToNewObject("excel.application")
if li_excel < 0 then 
    MessageBox("错误提示","连接excel失败,检查你的系统是否安装了office!")
    return 
end if

ExcelServer.Workbooks.Open(ls_path,0,False)
ExcelServer.Application.DisplayAlerts = False
ll_rows = ExcelServer.ActiveSheet.UsedRange.Rows.Count            //取得总行数
ll_columns= ExcelServer.ActiveSheet.UsedRange.columns.Count    //取得总行数

dw_grid.reset()
if ll_rows = 0 then
    messagebox("提示!","没有Excel数据可导,请检查Excel表格后重来!")
    ExcelServer.Workbooks.close()
    ExcelServer.DisConnectObject()
    Destroy ExcelServer
    return 
end if

//导入的excel文件行数是否超过1000 行
if ll_rows >1000 then
    messagebox("错误提示!","导入的excel文件列数过大,无法导入!")
    ExcelServer.Workbooks.close()
    ExcelServer.DisConnectObject()
    Destroy ExcelServer
    return 
end if

//导入的excel文件列数与所对应的数据窗口列数不一致,则提示
integer li_columncount    //得到数据窗口的总列数,总共14列
li_columncount = integer(dw_grid.describe("datawindow.column.count"))
if ll_columns <> li_columncount - 2 then
    messagebox("提示错误!","导入的excel文件列数与所对应的数据窗口类数不一致!")
    ExcelServer.Workbooks.close()
    ExcelServer.DisConnectObject()
    Destroy ExcelServer
    return 
end if

//从excel文件导入到数据窗口,没有空行,字段,计算列字段都为字符串型
//long m,n
//for m = 1 to ll_rows
//     dw_grid.insertrow(0)
//     for n = 1 to ll_columns
//          a[m,n] = string(ExcelServer.ActiveSheet.Cells[m,n].value)
//          dw_grid.Setitem(m,n,a[m,n])
//    next
//next

//ll_null为空行数
long m,amount,ll_null
amount = 0
for m = 1 to ll_rows
    a[m,1] = String(ExcelServer.ActiveSheet.Cells[m,1].value)
    if  len(a[m,1]) <> 0 then
        amount = amount+1
    end if
next
ll_null = ll_rows - amount

long i,li_count
string ls_text
for i=(ll_null+1+1) to ll_rows   //+1+1即表中列名称算一行,从+1行读起
    li_count = dw_grid.insertrow(0)
    dw_grid.setrow(li_count)
    
    //简称
    dw_grid.object.clientcode_1[li_count] = ExcelServer.ActiveSheet.Cells[i,2].text 
    //客户编码 
    dw_grid.object.clientcode[li_count] =  ExcelServer.ActiveSheet.Cells[i,1].text 
    //数期
    ls_text = ExcelServer.ActiveSheet.Cells[i,3].text
    if not isnumber( ls_text ) and ls_text <> '' then
        messagebox("错误","第["+ string(i) + ',3]单元格必须是数字!')
        return
    else
        dw_grid.object.yyprd_bas_client_sq[li_count] = Long(ls_text)
    end if
    //信用额
    if not isnumber(ExcelServer.ActiveSheet.Cells[i,4].text) and ExcelServer.ActiveSheet.Cells[i,4].text <> '' then
        messagebox("错误","第["+ string(i) + ',4]单元格必须是数字!')
        return
    else
        dw_grid.object.yyprd_bas_client_creditamount[li_count] = Dec(ExcelServer.ActiveSheet.Cells[i,4].text)
    end if
    //所属月份
    if not isdate(ExcelServer.ActiveSheet.Cells[i,5].text) and ExcelServer.ActiveSheet.Cells[i,5].text <> '' then
        messagebox("错误","第["+ string(i) + ',5]单元格必须是日期!')
        return
    else
        dw_grid.object.months[li_count] = datetime(ExcelServer.ActiveSheet.Cells[i,5].text)
    end if
    //货币
    dw_grid.object.currency[li_count] = String(ExcelServer.ActiveSheet.Cells[i,6].text)  
    //汇率
    if not isnumber(ExcelServer.ActiveSheet.Cells[i,7].text) and ExcelServer.ActiveSheet.Cells[i,7].text <> '' then
        messagebox("错误","第["+ string(i) + ',7]单元格必须是数字!')
        return
    else
        dw_grid.object.currencyrate[li_count] = dec(ExcelServer.ActiveSheet.Cells[i,7].text)
    end if
     //销售金额
    if not isnumber(ExcelServer.ActiveSheet.Cells[i,8].text) and ExcelServer.ActiveSheet.Cells[i,8].text <> '' then
        messagebox("错误","第["+ string(i) + ',8]单元格必须是数字!')
        return
    else
        dw_grid.object.salesamount[li_count] = Dec(ExcelServer.ActiveSheet.Cells[i,8].text)
    end if
     //备注
    dw_grid.object.yyprd_cdc_sales_remarks[li_count] = String(ExcelServer.ActiveSheet.Cells[i,9].text)   
    //建立日期
    ls_text = ExcelServer.ActiveSheet.Cells[i,10].text
    if  isnumber(ls_text) and ls_text <> '' then
        messagebox("错误","第["+ string(i) + ',10]单元格必须是日期!')
        return
    else
        dw_grid.object.created_date[li_count] = datetime(ExcelServer.ActiveSheet.Cells[i,10].text)
    end if
next

messagebox("提示","导入数据成功,请点击保存按钮提交到数据库!")
ExcelServer.Workbooks.close()
ExcelServer.DisConnectObject()
Destroy ExcelServer

最新文章

  1. c 数组与指针的使用注意事项
  2. 手把手写一个html_json信息源
  3. accept()
  4. count(*) vs count(1)--social.msdn.microsoft.com
  5. Java基础(7):二维数组初始化时需要注意的问题
  6. Mysql-学习笔记(==》建表修改一)
  7. Android:数据存储之SQLite
  8. Begin Andriod -- 安装android开发环境
  9. 武汉北大青鸟解读2016年10大IT热门岗位
  10. java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^
  11. 数据库MySQL与xls文件的互导
  12. git使用笔记(三)(图文说明) 图解提交更改内容的不同方式,涉及代码
  13. 多个项目使用NET Core
  14. D15
  15. Tiled Editor 图块的两种导入方式
  16. SAP的 消息 弹出窗口(备忘)
  17. 让ckplayer支持m3u8格式的播放
  18. Java中ArrayList类的用法
  19. 对迭代器操作的python 模块
  20. IP通信第四周作业

热门文章

  1. ORACLE AUDIT
  2. NumPyArray
  3. 【转】IDEA新建项目时,没有Spring Initializr选项(亲测有效)
  4. 新概念英语第二册Lesson5:No wrong numbers
  5. Shell Script 入门教程
  6. PHP 类属性
  7. Python带参数的函数装饰器
  8. ISO/IEC 9899:2011 条款6.8.3——表达式与空语句
  9. ES6深入浅出-4 迭代器与生成器-4.总结
  10. PAT 甲级 1070 Mooncake (25 分)(结构体排序,贪心,简单)