作者:乔山办公网日期:
返回目录:excel表格制作
(如无意外百) Excel 就是 UTF-8, 不用管里面的内容是甚麼
是 Perl 不是 PERL, Perl 是语言的名称度, perl 是解释器问
主要问题答是如果你光是用 Win32::OLE, 那预设的编码就是版你系统的编码, 例如 GB2312, 要解决你的问题, 可以试试在开头改成:
use Win32::OLE 'CP_UTF8';
$Win32::OLE::CP = CP_UTF8;
这样你读取权 excel 的编码就是 utf-8
兄弟,7a686964616fe4b893e5b19e364这不是抄来的,而是把VBA (Visual Basic)码按Win32 OLE直接转化过来的。。。
我下面再举个例子,附上原来的VBA码,你就明白了。。。
要解决你的问题,去看VBA的书,然后相应得转化就是了。。。
/index.pl?node_id=153486
================================================
use warnings; #Option Explicit
use Win32::OLE;
use Win32::OLE::Variant;
# Dim ex
#Set ex = CreateObject(Excel.Application)
$ex = Win32::OLE->new('Excel.Application', \&OleQuit) or die "oops\n";
#ex.Visible = 1
$ex->{Visible} = 1;
# ex.Workbooks.Add()
$ex->Workbooks->Add;
# Dim ovR8
# ovR8 = "3 is a good number"
$ovR8 = Variant(VT_R8, "3 is a good number");
# ex.Range("A1")=ovr8
$ex->Range("A1")->{Value} = $ovR8;
# ex.Range("A2") = "Jan 1,2010"
$ex->Range("A2")->{Value} = Variant(VT_DATE, 'Jan 1,2010');
use Win32::OLE;
my $ex = Win32::OLE->new('Excel.Application') or die "oops\n";
$ex->{Visible} = 1;
$ex->Workbooks->Add;
$ex->Range("A1")->{Value} = "中国";
my $Excel = Win32::OLE->new('Excel.Application', sub{(shift)->Quit;});是用来新建一个Win32::OLE对象
而my $Excel= Win32::OLE->GetActiveObject('Excel.Application'); 是使用已经打开的Excel进行工作。
如果目前你没有打开Excel,必须使用new新建一个,如果打开了就可抄以使用GetActiveObject了。你袭的第二种写法很怪,一般会写成if (!$excel){$Excel = Win32::OLE->new('Excel.Application', sub{(shift)->Quit;});
},因此也就与第一种一样了。因此你的两种写法本质上没有什么区别,既然出错了,建议关闭打开的Excel,然后使用new新建Win32::OLE对象进行操作。你遇到的问题估计是程序那个地方写错了,还是zd再查看一下程序吧。