使用win32ole操作Excel-1

class ExcelOs
  require 'win32ole'
=begin
' **  函数名:   CompareExcelSheet()
' **  输  入:   Excelvalue,filePath,sheetname,rowNum,colNum
' **  功能描述: 比较2个excel
                 'excelPath1             第一个EXCELexcel的路径地址
                 'excelPath2             第二个EXCELexcel的路径地址
                 'sheetname              目标的sheet的名称
' **  调用方法: CompareExcelSheet(excelPath1, excelPath2,sheetName)
' **  创建人:
' **  创建日期: 2009年11月3号
' **  修改记录:
=end

  def CompareExcelSheet(excelPath1, excelPath2,sheetName)

    diffFlag = false

    srcData1 = WIN32OLE::new('excel.Application')

    srcData1.Visible = false

    srcDoc1 = srcData1.Workbooks.Open(excelPath1)

    srcDoc1.Worksheets(sheetName).Activate

    rows1 = srcDoc1.Worksheets(sheetName).UsedRange.rows.Count

    columns1 = srcDoc1.Worksheets(sheetName).UsedRange.columns.Count

    srcData2 = WIN32OLE::new('excel.Application')

    srcData2.Visible = false

    srcDoc2 = srcData2.Workbooks.Open(excelPath2)

    srcDoc2.Worksheets(sheetName).Activate

    rows2 = srcDoc1.Worksheets(sheetName).UsedRange.rows.Count

    columns2 = srcDoc1.Worksheets(sheetName).UsedRange.columns.Count

    if (rows1 != rows2) or (columns1 != columns2)

      ret = "Excel sheet #{sheetName}used ranges are not equal"

      diffFlag = true

    else

      1.upto(rows1)  do |i|

        1.upto(columns1) do |j|

          tempDoc1 = (srcDoc1.Worksheets(sheetName).Cells(i,j).value).to_s

          tempDoc2 = (srcDoc2.Worksheets(sheetName).Cells(i,j).value).to_s

          if tempDoc1 != tempDoc2

            diffFlag = true

            ret ="#{ret}cell(#{i},#{j})values are differert:value1 =#{tempDoc1},value2 =#{tempDoc2}fengedian"

          end
        end
      end

      ret1 = "Excel sheet #{sheetName}cells are different:#{ret}"

    end

    if diffFlag == false

      ret = "Pass"

    else

      ret ="Faile\n#{ret}".split("fengedian")

    end

    srcDoc1.Close

    srcData1.Workbooks.Close

    srcData2.Workbooks.Close

    srcData1.Quit

    srcData2.Quit

    return ret

  end

=begin
' **  函数名:   readExcelCell()
' **  输  入:   filePath,sheetname,rowNum,colNum
' **  功能描述: 读取目标excel的sheet 的cell中的数据
                 'filePath            目标excel的路径地址
                 'sheetname    目标的sheet的名称
                 'rowNum          行号
                 'colNum            列号
' **  调用方法: writeExcelCell(content, pathway,sheetname,x,y)
' **  创建人:
' **  创建日期: 2009年11月3
' **  修改人:
' **  修改日期:
=end

  def  readExcelCell(filePath,sheetname,rowNum,colNum)

    if FileTest::exist?(filePath)

      srcData = WIN32OLE::new('excel.Application')

      srcData.Visible = false

      srcDoc = srcData.Workbooks.Open(filePath)

      srcDoc.Worksheets(sheetname).Activate

      ret = srcDoc.Worksheets(sheetname).Cells(rowNum,colNum).value

      srcData.Workbooks.Close

      srcData.Quit

    else

      ret = "file not found"

    end

    return ret

  end

=begin
' **  函数名:    OpenExcel
' **  输  入:    filePath,sheetName
' **              filePath ---  文件路径
' **              sheetName ---   表名
' **  功能描述:  此函数实现打开Excel表,创建sheet 对象
' **  调用方法:  Set sheet = OpenExcel("c:\db.xls","Sheet1")  要查询的单元格的值=sheet.cells(1,"A")
' **  创建人:
' **  创建日期:  2009年11月3
' **  修改人:
' **  修改日期:
=end

  def OpenExcel(filePath,sheetName)

    excObj = WIN32OLE::new('excel.Application')
    excFile = excObj.workbooks.open(filePath)
    excSheet = excFile.worksheets(sheetName)
    return excSheet
  end

=begin
' **  函数名:    CloseExcel
' **  输  入:    excSheet -- 要关闭的excel对象
' **  功能描述:  关闭Excel进程,与OpenExcel对应,每执行一次OpenExcel,都需要调用CloseExcel来关闭
' **  调用方法:  CloseExcel
' **  创建人:
' **  创建日期:  2009年11月3
' **  修改记录:
=end

  def CloseExcel(excSheet)

    excSheet.Application.Quit
    excSheet.close
  end

=begin
' **  函 数 名:  BackExcelRow
' **  输    入: filePath,sheetName
' **             filePath ---  文件路径
' **             sheetName ---   表名
' **  功能描述: 此函数实现打开Excel表,返回sheet数据的行数
' **  调用方法: BackExcelRow(filePath,sheetName)
' **  创建人:
' **  创建日期: 2009年11月3
' **  修改人:
' **  修改日期:
=end

  def BackExcelRow(filePath,sheetName)
    excObj = WIN32OLE::new('excel.Application')
    excFile = excObj.workbooks.open(filePath)
    excSheet = excFile.worksheets(sheetName)
    return excSheet.UsedRange.Rows.Count
    CloseExcel(excSheet)
  end

=begin
' **  函数名:    deleteExcelFile
' **  输  入:    filePath -- 要删除的excel文件对象
' **  功能描述:  删除指定的文件
' **  调用方法:   deleteExcelFil(filePath)
' **  创建人:
' **  创建日期:   2009年11月3
' **  修改记录:
=end

  def deleteExcelFile(filePath)
    if FileTest::exist?(filePath)
      File.delete(filePath)
    end
  end

=begin
' **  函数名:   writeExcelCell()
' **  输  入:   Excelvalue,filePath,sheetname,rowNum,colNum
' **  功能描述: 向目标excel的sheet 的cell中填写数据
                 'Excelvalue    要赋的值
                 'filePath            目标excel的路径地址
                 'sheetname    目标的sheet的名称
                 'rowNum          行号
                 'colNum            列号
' **  调用方法: writeExcelCell(Excelvalue,filePath,sheetname,rowNum,colNum)
' **  创建人:
' **  创建日期: 2009-11-6
' **  修改人:
' **  修改日期:
=end

  def writeExcelCell(excelvalue,filePath,sheetname,rowNum,colNum)

    if FileTest::exist?(filePath)

      srcData = WIN32OLE::new('excel.Application')

      srcData.Visible = false

      srcDoc = srcData.Workbooks.Open(filePath)

      srcDoc.Worksheets(sheetname).Activate

      srcDoc.Worksheets(sheetname).cells(rowNum,colNum).value =excelvalue

      srcDoc.Save

      srcData.Workbooks.Close

      srcData.Quit

      ret = "success"

    else

      ret = "File not found"

    end

    return ret
  end



end
a='C:\\Documents and Settings\lg\桌面\工作\员工通讯录.xls'
c='C:\\Documents and Settings\lg\桌面\工作\员工偷抹讯录1.xls'
#c="E:\WorkSpace\00-Automation\03_MOA\02_Branches\ZheJiang\V2.9.1\ReportFile\2009-9-7 report.xls"
b='员工通讯录'
# puts CompareExcelSheet(a,c,b)
puts ExcelOs.new.deleteExcelFile(c)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值