我有两台PC,一台安装了MS Office 2013 32bit,另一台安装了MS Office 64bit.我有Perl代码使用Win32::OLEPerl模块来操作XLS电子表格.代码在32位PC上运行得非常好,但在64位PC上有问题.
经过一些研究后,我发现了这一点.问题是以下代码行:
use Win32::OLE::Const 'Microsoft Excel .* Object Library';
Run Code Online (Sandbox Code Playgroud)
我查看了Win32::OLE::Const模块内部,似乎该模块正在注册表中查找该库.当我从32位和64位打印出注册表中的所有条目时,我发现该库在32位上可用而在64位上不可用.
有没有办法在64位上安装该库?如果没有,是否有任何其他模块可以允许Excel的OLE自动化?
我的所有Perl脚本需要做的是打开XLS文件并将其另存为CSV.我与做Spreadsheet::ParseExcel和Spreadsheet::XLSX所有其他的脚本.此特定XLS文件的问题在于它受密码保护并使用非标准密码加密.所以Spreadsheet::ParseExcel无法打开它.Win32::OLE在32位上打开文件没有问题.
如果需要,可以提供代码.
请指教.
谢谢,-Andrey
我Spreadsheet::XLSX用来在Linux上将XLSX转换为CSV.自定义日期字段正在转换为数字.我知道XLSX将自定义日期存储为序列值.我需要找到将这些值转换为日期/时间的方法.
例:
CSV: 40829
XLSX: 10/13/2011 0:00
Run Code Online (Sandbox Code Playgroud)
所以我想弄清楚如何转换40829为10/13/2011 0:00
我做了一些研究,但我找不到任何(Perl)解决方案.如果需要,我可以提供代码.
请指教.
谢谢,-Andrey
我有一个使用以下代码连接到 SFTP 服务器的脚本:
use Net::SFTP::Foreign;
my %cfg = (
user => "$user",
password => "$password",
port => 22,
more => [-o => 'StrictHostKeyChecking no']
);
my $sftp = Net::SFTP::Foreign->new("$host",%cfg);
Run Code Online (Sandbox Code Playgroud)
我正在使用 StrictHostKeyChecking 来确保脚本自动接受 ssh 密钥。当服务器用新密钥替换主机密钥时,问题就会出现。我收到错误:警告:远程主机标识已更改!
因此,我必须通过运行ssh-keygen -R testserver.com手动删除密钥, 之后脚本再次正常工作。我正在尝试找到一种方法来在密钥发生变化时自动替换密钥。从技术上讲,我可以在每次脚本运行时运行ssh-keygen -R testserver.com ,但我不喜欢这个解决方案。到目前为止,我还无法以一种很好的自动化方式来更换密钥。
我正在尝试使Ruby Watir脚本在新服务器上运行。
我在旧服务器上有一个工作脚本:
#!/bin/ruby
require 'rubygems'
require 'watir'
require 'date'
require 'headless'
require 'fileutils'
require 'uri'
require 'logger'
headless = Headless.new(autopick: true, reuse: false, destroy_at_exit: true).start
options = Selenium::WebDriver::Chrome::Options.new
options.add_preference(:download, prefs)
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-popup-blocking')
options.add_argument('--disable-translate')
b = Watir::Browser.new(:chrome, options: options)
b.goto 'someurl.com'
b.div(:id => 'IFRAME1').iframe.body.div(:id => 'DIVID1').div(class: ['Test1', 'Test2']).link(:id => 'DIVID2').click #getting warning here
Run Code Online (Sandbox Code Playgroud)
我收到的警告如下:
警告Selenium [不推荐使用] Selenium :: WebDriver :: Error :: ElementNotVisibleError已过时。请改用Selenium :: WebDriver :: Error :: ElementNotInteractableError(确保驱动程序支持W3C WebDriver规范)。
当前服务器版本:
无头(2.3.1,2.2.0)
selenium-webdriver(3.4.4)
瓦蒂尔(6.6.3)
新服务器版本:
无头(2.3.1)
selenium-webdriver(3.142.3,3.142.0)
瓦蒂尔(6.16.5)
我觉得问题出在版本不匹配,但我无法查明。
到目前为止,我找不到任何解决方案。
我正在尝试弄清楚如何通过 Linux 上的命令行将特定的 Excel 工作表另存为 CSV。我可以使用以下命令保存第一张纸:
libreoffice --headless --convert-to csv --outdir /tmp /tmp/test.xls
Run Code Online (Sandbox Code Playgroud)
似乎应该有一种方法来指定我要保存的工作表,但我找不到。
有没有办法通过 LibreOffice 保存它?
我需要编写一个从字符串中提取Date的正则表达式.
这是一个字符串示例:
日期:2014年2月11日星期二11:01:57 +0100(CET)
日期:2014年2月9日星期二11:01:57 +0100(CET)
这是我尝试过的:
$str =~ /Date.+(\d+\s[a-zA-Z]{3}\s\d{4}).+(CET)/;
print $1;
$str =~ /Date.+(\d{1,2}\s[a-zA-Z]{3}\s\d{4}).+(CET)/;
print $1
Run Code Online (Sandbox Code Playgroud)
当我有两位数的日子时,两个都失败了.我尝试了不同的变化,但没有成功.
我能够使它与以下工作:
$str =~ /Date.+(\s\d+\s[a-zA-Z]{3}\s\d{4}).+(CET)/;
my $date = $1;
$date =~ s/^\s//;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不是一个很好的解决方案.我确信有一种方法可以在正则表达式中实现它我找不到它.
请指教.
谢谢,
-Andrey