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)
使用win32ole操作Excel-1
最新推荐文章于 2021-05-14 20:06:59 发布