The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Perl+Excel"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Perl+Excel"  
Сообщение от aas202 email(ok) on 14-Авг-07, 11:34 
Привет всем.
Мне нужно отредактировать excel файл. Проблема в том что модель Spreadsheet::WriteExcel позволяет создать только новый excel файл и работать в нем. А как открыть файл для редактирования?
Спасибо
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Perl+Excel"  
Сообщение от cat (??) on 14-Авг-07, 12:49 
>Привет всем.
>Мне нужно отредактировать excel файл. Проблема в том что модель Spreadsheet::WriteExcel позволяет
>создать только новый excel файл и работать в нем. А как
>открыть файл для редактирования?
>Спасибо

Spreadsheet::ParseExcel

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Perl+Excel"  
Сообщение от aas202 email(??) on 14-Авг-07, 13:03 

> Spreadsheet::ParseExcel

ParseExcel не позволяет писать, только читать

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Perl+Excel"  
Сообщение от tx2 on 14-Авг-07, 14:15 
use Spreadsheet::WriteExcel;
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Perl+Excel"  
Сообщение от aas202 email(??) on 14-Авг-07, 14:16 
>use Spreadsheet::WriteExcel;

WriteExcel только новый файл создает и в нем работает, а мне нужно отредактировать файл.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Perl+Excel"  
Сообщение от phpcoder email(??) on 14-Авг-07, 14:18 
>WriteExcel только новый файл создает и в нем работает, а мне нужно
>отредактировать файл.

Ну раз читать можете и писать в другой файл тоже можете, то в чем проблема? Прочитал, записал во временный, а потом переименовал ) Во всяком случае должно работать.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Perl+Excel"  
Сообщение от aas202 email(??) on 14-Авг-07, 14:20 
>>WriteExcel только новый файл создает и в нем работает, а мне нужно
>>отредактировать файл.
>
>Ну раз читать можете и писать в другой файл тоже можете, то
>в чем проблема? Прочитал, записал во временный, а потом переименовал )
>Во всяком случае должно работать.

Это единственный выход? проблема в том что файл большой с различными форматами и тд. Не хочется ради одного изменения городить непонятно что.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Perl+Excel"  
Сообщение от tx2 on 17-Авг-07, 06:52 
если скрипт планируется выполнять под виндой, то можно через OLE...
описано здесь:
http://www.thescripts.com/forum/thread50152.html

если под никсами... незнаю, но есть предположение, что можно попробовать через какойнибудь automation интерфейс OpenOffice/StarOffice... они ж. Excelевские доки читают/пишут...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "сам столкнулся с подобной проблемой"  
Сообщение от amdk7 on 19-Фев-08, 11:31 
Сам столкнулся с подобной проблемой. Странно что у других людей подобной проблемы не было.
Т.е. я тоже хочу поменять одну или несколько ячеек и для этого мне надо один файл читать, а в другой писать, а редактировать ничего найти не могу.
Возможно, это связано со сложность формата, т.е. может после редактирования получится что файл перестанет открываться, может поэтому и решили отказаться от этого.

#!/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});
то ругается, не понимает.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "сам столкнулся с подобной проблемой"  
Сообщение от aas202 (??) on 19-Фев-08, 11:37 
За столько времени я так и не нашел более менее подходящего решения. Пришлось писать VB скрипт под Excel и его запускать из перла.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "сам столкнулся с подобной проблемой"  
Сообщение от amdk7 on 19-Фев-08, 11:56 
Кажется я нашёл!
вам нужен Spreadsheet::ParseExcel::SaveParser - Expand of Spreadsheet::ParseExcel with Spreadsheet::WriteExcel

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');

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "сам столкнулся с подобной проблемой"  
Сообщение от aas202 (??) on 19-Фев-08, 11:57 
>[оверквотинг удален]
>
>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');

попробуемс.. спасибо

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "сам столкнулся с подобной проблемой"  
Сообщение от Anton (??) on 19-Сен-08, 19:58 
>[оверквотинг удален]
>>А вот пример программы
>> 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');
>
>попробуемс.. спасибо

А русский текст победили? У меня ничего не выходит.. пробовал в разных кодировках - один фиг

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "сам столкнулся с подобной проблемой"  
Сообщение от Lex email(??) on 27-Окт-08, 11:54 
>>>А вот пример программы
>>> 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',"Русский текст"));

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру