google rss rss

          doneykoo [Ouditian]

          DKzone- Ouditian Technology

          ruby操作excel文件

          使用ruby來操作excel文件首先需要在腳本里包含以下語句
          require 'win32ole'

          把win32ole包含進來后,就可以通過和windows下的excel api進行交互來對excel文件進行讀寫了.


          打開excel文件,對其中的sheet進行訪問:
          excel = WIN32OLE::new('excel.Application')
          workbook = excel.Workbooks.Open('c:\examples\spreadsheet.xls')
          worksheet = workbook.Worksheets(1) #定位到第一個sheet
          worksheet.Select

          讀取數(shù)據(jù):
          worksheet.Range('a12')['Value'] #讀取a12中的數(shù)據(jù)
          data = worksheet.Range('a1:c12')['Value'] #將數(shù)據(jù)讀入到一個二維表


          找到第一處a列的值為空值
          line = 1
          while worksheet.Range("a#{line}")['Value']
             line=line+1
          end #line的值為第一處空白行的行數(shù)


          將第一列的值讀入到一個數(shù)組中
          line = '1'
          data = []
          while worksheet.Range("a#{line}")['Value']
             data << worksheet.Range("a#{line}:d#{line}")['Value']
             line.succ!
          end


          將數(shù)據(jù)寫入到excel表格中
          worksheet.Range('e2')['Value'] = Time.now.strftime '%d/%m/%Y' #單個值
          worksheet.Range('a5:c5')['Value'] = ['Test', '25', 'result'] #將一個數(shù)組寫入


          調用宏定義
          excel.Run('SortByNumber')

          設置背景色
          worksheet.Range('a3:f5').Interior['ColorIndex'] = 36 #pale yellow
          # 將背景色恢復成無色
          worksheet.Range('a3:f5').Interior['ColorIndex'] = -4142 # XlColorIndexNone constant
          # 使用Excel constant 將背景色恢復成無色
          worksheet.Range('a3:f5').Interior['ColorIndex'] = ExcelConst::XlColorIndexNone


          保存
          workbook.Close(1)
          # 或
          workbook.SaveAs 'myfile.xls'
          # 默認路徑是系統(tǒng)定義的"我的文檔"


          結束會話
          excel.Quit

          一些相對完整的代碼片段

          創(chuàng)建一個excel文件并保存
          require 'win32ole'
          excel = WIN32OLE.new("excel.application")
          excel.visible = true     # in case you want to see what happens
          workbook = excel.workbooks.add
          workbook.saveas('c:\examples\spreadsheet1.xls')
          workbook.close

          操作excel文件的幾個重要元素
          Excel => workbook => worksheet => range(cell)
          我理解的是excel為類名,workbook為一個具體的(excel文件)實例,創(chuàng)建好實例后,worksheet是實例(workbook,工作簿)中的一個工作表,然后可

          以對工作表中的每個單元格(range(cell))進行具體的讀寫------------------按照這樣操作肯定沒有錯,不過下面的這些語句又讓我有些疑惑


          excel.workbooks("Mappe1").worksheets("Tabelle1").range("a1").value #讀取名為Mappe1的excel文件中工作表名為Tabelle1的a1單元格中的值
          excel.worksheets("Tabelle1").range("a1").value #作用同第一條語句
          excel.activeworkbook.activesheet.range("a1").value #作用同第一條語句
          excel.activesheet.range("a1").value #作用同第一條語句
          excel.range("a1").value #作用同第一條語句

          excel可以直接操作所有的屬性,默認為當前活躍的工作簿/工作表


          對單元格的操作:

          某個單元格: sheet.range("a1")

          a1到c3的值:   sheet.range("a1", "c3") 或 sheet.range("a1:c3")

          第一列:    sheet.range("a:a")

          第三行:    sheet.range("3:3")

          獲得單元格的值:
          range.text #讀取值,返回為字符串格式,如果單元格內為數(shù)字,有可能會被截斷小數(shù)點后的位數(shù)
          sheet.range("a1").text  

          range.value #讀取值,數(shù)字不會截斷
          sheet.range("a1").value      

          對單元格設置值
          sheet.range("a1").value = 1.2345

          sheet.range("a1").value = '1.2345'

          迭代訪問:

          sheet.range("a1:a10").each{|cell|puts cell.value}

          如果范圍是一個矩形,則會按行循環(huán)迭代訪問
          sheet.range("a1:b5").each{|cell|puts cell.value}

          block迭代,并打印出每行的第一個值
          sheet.range("b3:c7").rows.each{|r|puts r.cells(1,1).value}

          posted on 2009-02-26 10:25 DoNeY 閱讀(2866) 評論(0)  編輯  收藏 所屬分類: GameDev

            doneykoo blogjava
            
          主站蜘蛛池模板: 涟水县| 新和县| 平乡县| 定陶县| 广宁县| 乌兰察布市| 精河县| 楚雄市| 微博| 焦作市| 皋兰县| 巴林左旗| 寿光市| 曲靖市| 岑巩县| 安康市| 铜川市| 黔西县| 莒南县| 宿州市| 石家庄市| 古浪县| 富民县| 浦北县| 宁都县| 连云港市| 林甸县| 从江县| 福清市| 泾阳县| 灌南县| 扶风县| 武城县| 姚安县| 二连浩特市| 和林格尔县| 偃师市| 张家川| 黄浦区| 霞浦县| 宜黄县|