使用Excel数据在Dashing Dashboard上显示?

时间:2015-04-01 21:04:39

标签: ruby linux excel dashing roo-gem

我试图从github获取以下代码的示例,这些代码对我的Linux / Ubuntu安装来说似乎是一个死机。我一直在尝试使用" mechanize"从我的公司内部网抓取数据。见stack question for details。由于我没有足够的智能来解决我的登录问题,我想我会尝试从excel表中提取数据作为解决方法直到我能够找出机械化路线。再一次,我不够聪明,无法让所提供的代码在Linux上运行,因为我收到以下错误:

`kqueue =':此平台不支持kqueue(EventMachine :: Unsupported)

如果我从原始来源提供的信息中正确理解,问题是Linux中不支持kqueue。 OP声明inotify是另一种选择,但我没有找到使用它在小部件中显示Excel的类似示例。

以下是GitHub上显示的代码,并希望帮助将其转换为在Linux上运行:

require 'roo'

EM.kqueue = EM.kqueue?
file_path = "#{Dir.pwd}/spreadsheet.xls"

def fetch_spreadsheet_data(path)
  s = Roo::Excel.new(path)
  send_event('valuation',   { current: s.cell(1, 2) })
end

module Handler
  def file_modified
    fetch_spreadsheet_data(path)
  end
end

fetch_spreadsheet_data(file_path)

EM.next_tick do
  EM.watch_file(file_path, Handler)
end

2 个答案:

答案 0 :(得分:0)

好的,所以我能够通过以下方式让这个工作并在Dashing Dashboard小部件上显示我的数据:

首先:我将 spreadsheet.xls 上传到我的信息中心的根目录。

第二:我将 /jobs/sample.rb 代码替换为:

#!/usr/bin/env ruby
require 'roo'


SCHEDULER.every '2s' do
file_path = "#{Dir.pwd}/spreadsheet.xls"

def fetch_spreadsheet_data(path)
  s = Roo::Excel.new(path)
  send_event('valuation',   { current: s.cell('B',49) })

end

module Handler
  def file_modified
    fetch_spreadsheet_data(path)
  end
end

fetch_spreadsheet_data(file_path)

end

第三:确保 / widgets / number 位于您的信息中心"这是示例安装的一部分"。

第四:将以下代码添加到 /dashboards/sample.erb 文件&#34;这也是示例安装的一部分&#34;。< / p>

<li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
      <div data-id="valuation" data-view="Number" data-title="Current Valuation" data-prefix="$"></div>
    </li>

我使用this source来帮助我更好地了解Roo的工作原理。我通过更改我的值并重新上传spreadsheet.xls到服务器并在我的仪表板上看到即时更改来测试我的小部件。

希望这有助于某人和我仍在寻找帮助,通过抓取数据来自动完成此过程。参考this if you can help

答案 1 :(得分:0)

感谢您分享此代码示例。我没有设法让它在我的环境中工作(Raspberry / Raspbian),但经过一些努力,我设法找到了一些有用的东西 - 至少对我而言;)

本周之前我从未使用过Ruby,所以这段代码可能有点糟糕。请接受道歉。

- Christophe

require 'roo'
require 'rubygems'
require 'rb-inotify'

# Implement INotify::Notifier.watch as described here:
# https://www.go4expert.com/articles/track-file-changes-ruby-inotify-t30264/

file_path = "#{Dir.pwd}/datasheet.csv"

def fetch_spreadsheet_data(path)
  s = Roo::CSV.new(path)
  send_event('csvdata',   { value: s.cell(1, 1) })
end

SCHEDULER.every '5s' do

notifier = INotify::Notifier.new

notifier.watch(file_path, :modify) do |event|
    event.flags.each do |flag|
        ## convert to string
        flag = flag.to_s

        puts case flag
            when 'modify' then fetch_spreadsheet_data(file_path)
        end
    end
end

## loop, wait for events from inotify
notifier.process

end