Привет всем.
Мне нужно отредактировать excel файл. Проблема в том что модель Spreadsheet::WriteExcel позволяет создать только новый excel файл и работать в нем. А как открыть файл для редактирования?
Спасибо
>Привет всем.
>Мне нужно отредактировать excel файл. Проблема в том что модель Spreadsheet::WriteExcel позволяет
>создать только новый excel файл и работать в нем. А как
>открыть файл для редактирования?
>СпасибоSpreadsheet::ParseExcel
> Spreadsheet::ParseExcelParseExcel не позволяет писать, только читать
use Spreadsheet::WriteExcel;
>use Spreadsheet::WriteExcel;WriteExcel только новый файл создает и в нем работает, а мне нужно отредактировать файл.
>WriteExcel только новый файл создает и в нем работает, а мне нужно
>отредактировать файл.Ну раз читать можете и писать в другой файл тоже можете, то в чем проблема? Прочитал, записал во временный, а потом переименовал ) Во всяком случае должно работать.
>>WriteExcel только новый файл создает и в нем работает, а мне нужно
>>отредактировать файл.
>
>Ну раз читать можете и писать в другой файл тоже можете, то
>в чем проблема? Прочитал, записал во временный, а потом переименовал )
>Во всяком случае должно работать.Это единственный выход? проблема в том что файл большой с различными форматами и тд. Не хочется ради одного изменения городить непонятно что.
если скрипт планируется выполнять под виндой, то можно через OLE...
описано здесь:
http://www.thescripts.com/forum/thread50152.htmlесли под никсами... незнаю, но есть предположение, что можно попробовать через какойнибудь automation интерфейс OpenOffice/StarOffice... они ж. Excelевские доки читают/пишут...
Сам столкнулся с подобной проблемой. Странно что у других людей подобной проблемы не было.
Т.е. я тоже хочу поменять одну или несколько ячеек и для этого мне надо один файл читать, а в другой писать, а редактировать ничего найти не могу.
Возможно, это связано со сложность формата, т.е. может после редактирования получится что файл перестанет открываться, может поэтому и решили отказаться от этого.#!/usr/local/bin/perl
use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::WriteExcel;print "Content-type:text/html; charset=windows-1251\n\n";
print "<html>\n<head>";print "<TITLE>Конвертор</TITLE>\n<META NAME=\"content\" CONTENT=\"text/html; charset=windows-1251\">\n";
print "</HEAD><BODY>\n";my $excel = Spreadsheet::ParseExcel::Workbook->Parse('/home/.../file1.xls');
my $workbook = Spreadsheet::WriteExcel->new('/home/.../file2.xls');
my $worksheet = $workbook->add_worksheet();
foreach my $sheet (@{$excel->{Worksheet}}) {
printf("Sheet: %s\n", $sheet->{Name});
$sheet->{MaxRow} ||= $sheet->{MinRow};
foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) {
$sheet->{MaxCol} ||= $sheet->{MinCol};
foreach my $col ($sheet->{MinCol} .. $sheet->{MaxCol}) {
my $cell = $sheet->{Cells}[$row][$col];
if ($cell) {
# $worksheet->write(0, 0, "Hi Excel!");
$worksheet->write($row, $col, $cell->{Val});
$cell->{Val}='333';
printf("( %s , %s ) => %s\n", $row, $col, $cell->{Val});
}
}
}
}
$excel->close();
$workbook->close();
print "</body>\n</html>";Оно работает. но без форматирования и без русских букв - вместо них фигня какая-то.
если написать
$worksheet->write($row, $col, $cell->{Val}, $cell->{Format});
то ругается, не понимает.
За столько времени я так и не нашел более менее подходящего решения. Пришлось писать VB скрипт под Excel и его запускать из перла.
Кажется я нашёл!
вам нужен Spreadsheet::ParseExcel::SaveParser - Expand of Spreadsheet::ParseExcel with Spreadsheet::WriteExcelhttp://search.cpan.org/~szabgab/Spreadsheet-ParseExcel-0.32/...
А вот пример программы
use strict;
use Spreadsheet::ParseExcel::SaveParser;
$oBook =
Spreadsheet::ParseExcel::SaveParser::Workbook->Parse('Excel/Test97.xls');
my $oWs = $oBook->AddWorksheet('TEST1');
$oWs->AddCell(10, 1, 'New Cell');
$oBook->SaveAs('iftest.xls');
>[оверквотинг удален]
>
>http://search.cpan.org/~szabgab/Spreadsheet-ParseExcel-0.32/...
>А вот пример программы
> use strict;
> use Spreadsheet::ParseExcel::SaveParser;
> $oBook =
> Spreadsheet::ParseExcel::SaveParser::Workbook->Parse('Excel/Test97.xls');
> my $oWs = $oBook->AddWorksheet('TEST1');
> $oWs->AddCell(10, 1, 'New Cell');
> $oBook->SaveAs('iftest.xls');попробуемс.. спасибо
>[оверквотинг удален]
>>А вот пример программы
>> use strict;
>> use Spreadsheet::ParseExcel::SaveParser;
>> $oBook =
>> Spreadsheet::ParseExcel::SaveParser::Workbook->Parse('Excel/Test97.xls');
>> my $oWs = $oBook->AddWorksheet('TEST1');
>> $oWs->AddCell(10, 1, 'New Cell');
>> $oBook->SaveAs('iftest.xls');
>
>попробуемс.. спасибоА русский текст победили? У меня ничего не выходит.. пробовал в разных кодировках - один фиг
>>>А вот пример программы
>>> use strict;
>>> use Spreadsheet::ParseExcel::SaveParser;
>>> $oBook =
>>> Spreadsheet::ParseExcel::SaveParser::Workbook->Parse('Excel/Test97.xls');
>>> my $oWs = $oBook->AddWorksheet('TEST1');
>>> $oWs->AddCell(10, 1, 'New Cell');
>>> $oBook->SaveAs('iftest.xls');
>>а вот код этот не работает у меня почему то, пришет что метода Parse нет в пакете Spreadsheet::ParseExcel::SaveParser::Workbook, хотя вроде все про ципанил... покажите рабочий код у кого заработало
А русский текст победили:
my $worksheet1 = $workbook->add_worksheet(Encode::decode('utf8','Русский текст'));
$worksheet1->write('C'.$i++,Encode::decode('utf8',"Русский текст"));