- 论坛徽章:
- 12
|
本帖最后由 523066680 于 2014-03-18 23:21 编辑
回复 2# dahe_1984
我找到针对你这个表格的辨别方法了(如果一定要在EXCEL2003处理的话……),
几乎确定在这个表格中超出ASCII范围的字符都是和 ASCII 字符在一起的,也就是像
"α"这样的字符并不会单独存在。这个时候ASCII 字符一定会被转换为 00 ??的两个
节形式只要判断字节流中有0就必定是UTF-16BE。
完整的处理代码你自己写了,判断部分我写个例子吧
把Product Full_2014_03_02.xls表格第二列复制到新表单独做了测试- use Spreadsheet::Read;
- use Spreadsheet::WriteExcel;
- use Encode;
- # for read
- my $book = ReadData ("Product Full_2014_03_03.xls");
- my ($col,$row);
- my $value;
- # for write
- my $workbook=Spreadsheet::WriteExcel->new('b.xls');
- my $worksheet = $workbook->add_worksheet();
- foreach $col (1..1) {
- foreach $row (1..65536) {
- $value = $book->[1]{cell}[$col][$row];
- if (defined $value) {
- if (isASCII($value)) {
- $worksheet->write($row-1,0,$value);
- } else {
- $worksheet->write($row-1,0,decode('utf16-BE',$value));
- }
- } else {
- print "Line of $row is empty\n";
- }
- }
- }
- $workbook->close();
- sub isASCII {
- for my $v ( split(//,$_[0]) ) {
- return 0 if (ord($v) == 0);
- }
- return 1;
- }
复制代码 |
|