mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-12-06 17:48:25 +01:00
118 lines
5.0 KiB
Plaintext
118 lines
5.0 KiB
Plaintext
What is it all about?
|
|
---------------------
|
|
php_writeexcel is a port of John McNamara's excellent Spreadsheet::WriteExcel
|
|
Perl package to PHP. It allows you to generate Microsoft Excel documents on
|
|
your PHP enabled Web server without any other tools.
|
|
|
|
|
|
|
|
Where to start
|
|
--------------
|
|
I've included six example PHP scripts which are also taken out of the
|
|
Spreadsheet::WriteExcel package and ported to PHP:
|
|
- example-simple.php
|
|
- example-merge2.php
|
|
- example-stocks.php
|
|
- example-textwrap.php
|
|
- example-demo.php
|
|
- example-bigfile.php
|
|
All you have to do is to tar xzvf the package to a directory accessible
|
|
via a web server. Then fetch any of the example scripts with your
|
|
favourite web browser and Excel should come into place and show you
|
|
a sheet.
|
|
|
|
|
|
|
|
Problems of porting Perl code to PHP
|
|
------------------------------------
|
|
When you take a first look at both languages, they seem to be very
|
|
similar: Variable names begin with a dollar sign, control structures
|
|
look like in C. You don't have to change most of these things.
|
|
|
|
Then, there are things which can be done by find and replace: Perl subs
|
|
are functions in PHP. Perl properties like $this->{prop} are $this->prop
|
|
in PHP. "elsif" in Perl is "elseif" in PHP. Even porting Perl's so called
|
|
OOP is not very difficult: just delete the "my $this=shift;" at the
|
|
beginning of each method and then put all the methods into a class {} block.
|
|
Just be aware that in Perl not the function declaration decides if the
|
|
function is a method or not, but the call of the function. If you say
|
|
myfunc(), it's a function, if you say $obj->myfunc(), it's a method.
|
|
|
|
Then the trouble begins. There were three major things I had problems
|
|
with while porting SpreadSheet::WriteExcel to PHP:
|
|
- function (sub) handling:
|
|
In Perl's list philosophy the number of paramaters and return values
|
|
are variable by design: Just use myfunc(@myarray) to pass a complete
|
|
array to the function and the array's values will be the function's
|
|
arguments.
|
|
In PHP this is possible though undesirable as you have to use ugly
|
|
things like call_user_function_array() and call_user_method_array()
|
|
if you want to translate the Perl code literally.
|
|
- Reference juggling:
|
|
This can be very confusing when reading Perl code making
|
|
excessive use of it. References are supported by PHP, but it's
|
|
hard to translate them mainly due to to PHP's habit to copy
|
|
EVERYTHING on any assignment. Even if you do a "$obj=new myclass();",
|
|
PHP will create a copy of the instantiated class. It's sometimes
|
|
hard to recognize when you have to use the "=&" operator to create
|
|
a reference instead of a copy. And, hey, when the hell will the
|
|
PHP developers implement a foreach loop which assigns the array
|
|
values by reference?? :-(
|
|
- Perl's AUTOLOAD method - PHP does not have such a thing. When
|
|
a class has many properties and the AUTOLOAD method is used
|
|
to simulate a set_xxx() for each property, you'll have to define all
|
|
possible function calls manually.
|
|
|
|
|
|
|
|
What features are currently supported?
|
|
--------------------------------------
|
|
Basically all features of Spreadsheet::WriteExcel are supported and
|
|
thanks to a lot of people (see CHANGELOG) who contributed code and bug
|
|
fixes, most things seem to work. However, please remember that it's still
|
|
in beta stage, so there are probably some bugs left.
|
|
|
|
Spreadsheet::WriteExcel uses the Parse::RecDescent package for formula
|
|
support. Andreas Brodowski has imported and changed the PEAR::Spreadsheet
|
|
Parser.php file, so formulas are supported since version 0.2.2.
|
|
|
|
Spreadsheet::WriteExcel uses the OLE::Storage_Lite package for
|
|
supporting Excel files bigger than approx. 7 MB. I have ported this
|
|
package already and called it php_ole. But I really don't know how
|
|
reliable it is, so use it with care!
|
|
|
|
|
|
|
|
Documentation
|
|
-------------
|
|
Sorry, there is no documentation yet. You'll have to use the documentation
|
|
for Spreadsheet::WriteExcel available at
|
|
http://search.cpan.org/doc/JMCNAMARA/Spreadsheet-WriteExcel-0.37/WriteExcel/doc/WriteExcel.html
|
|
for now. Try to translate the Perl code into PHP with the help of the
|
|
examples. Please note that you have to assign variables by reference
|
|
(using the =& operator) quite often!
|
|
|
|
|
|
|
|
Reporting bugs
|
|
--------------
|
|
If you've found a bug, please send a bug report to jonny@nurfuerspam.de.
|
|
Please include "php_writeexcel" in the subject so that I can search for bug
|
|
reports by searching for that string.
|
|
Please note that my email address has changed. Several mails have been lost,
|
|
so if you patch didn't get it, please resend it.
|
|
If you get error messages, please include them in your report. Please also
|
|
check your Apache error_log for messages coming from php_writeexcel.
|
|
If you get corrupted Excel files, please include them in your email. If
|
|
one of the demos generates a corrupted file please try to find out the
|
|
differences between your file and the file you are getting from the
|
|
online demo at the php_writeexcel homepage!
|
|
|
|
|
|
|
|
|
|
Syntax different from SpreadSheet::WriteExcel
|
|
---------------------------------------------
|
|
The worksheet methods set_h_pagebreaks() and set_v_pagebreaks() take
|
|
exactly one argument which must be an array with the desired page breaks.
|