小编And*_*rey的帖子

如何使Win32 :: OLE在64位MS OFFICE安装上工作

我有两台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::ParseExcelSpreadsheet::XLSX所有其他的脚本.此特定XLS文件的问题在于它受密码保护并使用非标准密码加密.所以Spreadsheet::ParseExcel无法打开它.Win32::OLE在32位上打开文件没有问题.

如果需要,可以提供代码.

请指教.

谢谢,-Andrey

excel perl win32ole

7
推荐指数
1
解决办法
6704
查看次数

在Perl中将序列值转换为日期

Spreadsheet::XLSX用来在Linux上将XLSX转换为CSV.自定义日期字段正在转换为数字.我知道XLSX将自定义日期存储为序列值.我需要找到将这些值转换为日期/时间的方法.

例:

CSV:  40829
XLSX: 10/13/2011 0:00
Run Code Online (Sandbox Code Playgroud)

所以我想弄清楚如何转换4082910/13/2011 0:00

我做了一些研究,但我找不到任何(Perl)解决方案.如果需要,我可以提供代码.

请指教.

谢谢,-Andrey

csv perl date xlsx

4
推荐指数
1
解决办法
1337
查看次数

在 Linux 上自动替换主机密钥

我有一个使用以下代码连接到 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 ,但我不喜欢这个解决方案。到目前为止,我还无法以一种很好的自动化方式来更换密钥。

perl sftp

4
推荐指数
1
解决办法
625
查看次数

Ruby Watir Selenium WebDriver描述了警告

我正在尝试使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)

我觉得问题出在版本不匹配,但我无法查明。

到目前为止,我找不到任何解决方案。

ruby watir selenium-webdriver

3
推荐指数
1
解决办法
919
查看次数

将特定 Excel 工作表另存为 .csv

我正在尝试弄清楚如何通过 Linux 上的命令行将特定的 Excel 工作表另存为 CSV。我可以使用以下命令保存第一张纸:

libreoffice --headless --convert-to csv --outdir /tmp /tmp/test.xls
Run Code Online (Sandbox Code Playgroud)

似乎应该有一种方法来指定我要保存的工作表,但我找不到。

有没有办法通过 LibreOffice 保存它?

csv xls libreoffice

3
推荐指数
1
解决办法
1922
查看次数

Perl:如何从字符串中解析Date

我需要编写一个从字符串中提取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

regex perl

1
推荐指数
1
解决办法
5655
查看次数

标签 统计

perl ×4

csv ×2

date ×1

excel ×1

libreoffice ×1

regex ×1

ruby ×1

selenium-webdriver ×1

sftp ×1

watir ×1

win32ole ×1

xls ×1

xlsx ×1