Commit Graph

333 Commits

Author SHA1 Message Date
Ivan
c2419f3896 Code Inspector improvements
Change coding issues raised by code inspector.
Still some remain to fix.
2014-03-18 10:34:13 -05:00
chrassig
55ac5af43b More sophisticated calculation of cell widths
Let me start by saying we really love the ABAP2XLSX project. Compared to exporting CSV files and importing them to Excel, it makes transferring data from SAP systems to Excel and vice versa so much easier.

What we did not like so far was the optimization of column width, especially because of the way this is realized in the XLSX file format (why did they not just add an attribute "optimize column width = true"?). Anyway, ABAP2XLSX being an open source project, we decided to try to bring some progress to this feature.

We ended up rewriting the method CALCULATE_CELL_WIDTH of the class ZCL_EXCEL_WORKSHEET.

We added the following features:
a) Before, the calculation of the cell width in ABAP2XLSX did not take into account the fact that Excel uses a proportional font by default. Thus, columns with many "i"s ended up too wide, while columns containing many "W"s ended up not wide enough.

We now use the function module LOAD_FONT, contained in SAP package BC. Thus, it should be available in pretty much every SAP system that runs ABAP. LOAD_FONT returns an internal table containing the width of every letter known in a font. You can upload Excel's default font Calibri using transaction SM73. Make sure to upload all four files (standard, bold, italic, bold and italic) and to use the description "Calibri", i.e. exactly the name Excel displays for the font. If you want to use other fonts in your files created by ABAP2XLSX, you can of course upload other fonts as well.

We calculate the sum of the widths of all characters in a cell, and add some cell padding, similar to the way Excel does it. If the font is not available in your SAP system, we revert back to a logic similar to the old one.

As calling LOAD_FONT for every cell took several seconds when we tested with larger tables, we store the values read from the function in a hash table. Thus, we only have to call the function once for every combination of font name and font attributes used in your Excel file.

b) XLSX stores dates in a cryptic format. For dates, the current implementation calculates the width of the cryptic values, thus, the columns end up too narrow.

Fortunately, ABAP2XLSX already contains a method to transform the cryptic value into an ABAP date. We then use ABAP's WRITE statement to create a date in the format the user is preferring, and calculate the width of this formatted date.

c) ABAP2XLSX currently does not consider auto filters. Thus, a column may end up too narrow, not showing the complete header text.

We fixed this by adding a fixed value to the cell width if an auto filter is activated. We use a fixed value because the size of the auto filter button in Excel does not depend on the font size you use.

d) ABAP2XLSX only estimates the width of the characters. Excel adds a small fixed amount to the width of the characters to create some horizontal cell padding. We added cell padding as well, as this brought the cell width even closer to the values calculated by Excel.

e) ABAP2XLSX already uses ABAP's data type FLOAT to store the width of a cell. However, CALCULATE_CELL_WIDTH used data type I (integer) to calculate the cell width before. Changing the parameter type for the parameter EP_WIDTH from I to FLOAT, and adjusting the variable used by the calling method CALCULATE_COLUMN_WIDTHS in the same way, made the calculation even more precise.
2014-03-14 16:15:09 +01:00
Ivan
76bb151bbb Fix issue #308
Changed returning parameter  of method PIXEL2EMU from INT4 to STRING
2014-03-13 12:16:32 -05:00
Ivan
66f7f67943 Fix issue #296 2014-03-05 14:03:43 -06:00
Ivan
111cf14f2d Fix issue #297 2014-03-05 14:00:00 -06:00
Ivan
a6a0430ade Fix for issue #301 2014-03-05 13:50:07 -06:00
alsp80
4310280806 Add extraction of data validations 2014-03-04 22:26:54 +01:00
alsp80
8811d2c755 Add data import of data validations to reader 2014-03-04 16:34:05 +01:00
Ivan
ad22cf7eaf Improved memory usage and readability
Extract the parts for loading the file from application server /
presentation server into two new private methods.
Not only is the code better readable (currently, the very important LOAD
call at the end of the method almost vanishes after all that file
loading code)  - it also saves memory. Currently, when the LOAD message
is processed, not only the EXCEL_DATA xstring, but also BIN_TAB, the
auxiliary table of bytes which is retrieved from GUI_UPLOAD, is kept in
the memory as a redundant copy of the raw data, although during the
parse process it is not needed any more.
2014-02-24 16:04:18 -06:00
Ivan
169764004b Renaming huge file reader class 2014-02-24 15:32:29 -06:00
Ivan
822f9f75a3 Load file has new importing parameter for sy-batch
In the interface method ZIF_EXCEL_READER~LOAD_FILE, add an optional
import parameter I_FROM_APPLSERVER of type flag with default SY-BATCH,
and use this parameter, instead of SY-BATCH directly, for the decision
whether to load the file from application or from presentation server.
This will make the method more flexible, decoupling the decision "Where
to read the file from" from the circumstance "Am I in batch mode". By
making the parameter optional and using the default value SY-BATCH, all
existing client code will work as before.
2014-02-24 15:31:25 -06:00
Ivan
449e312c87 Suggestion by Rüdiger Plantiko
In methid ZIF_EXCEL_READER~LOAD_FILE, change the import parameter
I_FILENAME from type STRING to the generic type CSEQUENCE, and move it
to a string internally where needed.
This saves the client from having to move a CHAR field to an auxiliary
STRING field, only for not having a "type conflict" when calling the
method.
2014-02-24 15:24:18 -06:00
Ivan
d844114773 Exception class is no longer marked as final 2014-02-24 15:07:13 -06:00
Ivan
75d100150f Huge file reader by Rüdiger Plantiko
See more details in this blog
http://scn.sap.com/community/abap/blog/2014/01/27/a-way-of-reading-huge-excel-files
2014-02-24 12:11:39 -06:00
Gh14Cc10
d60745f47a Corrected Conditional Formatting bug
Conditional formatting doesn't apply font styles like bold, strikes,
underlines, color and so on.
2014-02-12 12:18:01 +01:00
Gh14Cc10
1cd76945c6 Revert "Corrected Conditional Formatting bug"
This reverts commit d01e6ab5ea.
2014-02-12 12:12:28 +01:00
Gh14Cc10
d01e6ab5ea Corrected Conditional Formatting bug
Conditional formatting font styles were not applied.
2014-02-12 12:05:03 +01:00
Gh14Cc10
cc4bb7d226 Revert "Corrected Conditional Formatting bug"
This reverts commit dda3712f23.
2014-02-12 12:03:37 +01:00
Gh14Cc10
dda3712f23 Corrected Conditional Formatting bug
Conditional formatting didn't apply font styles like color, strikes,
bold and so on. Now it is working.
2014-02-12 11:50:44 +01:00
ivanfemia
0d62589e6f Add TOOLS and BUILD directories to the repository 2013-12-26 14:51:34 -06:00
Ivan Femia
6191d1662c Mispelling license.txt
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@440 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-12-16 21:29:30 +00:00
Ivan Femia
cc9f7ab043 Licence update to Apache 2.0
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@439 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-12-16 21:28:07 +00:00
Ivan Femia
cd5e43193b Databar Conditional Formatting by Albert Lladanosa
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@437 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-10-31 21:05:10 +00:00
Ivan Femia
3bae68f551 Set to Test #292
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@434 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-09-16 23:20:17 +00:00
Ivan Femia
427ca5c4d8 Fixed #291
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@433 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-09-16 23:17:04 +00:00
Ivan Femia
5c6995fe90 Test #290
It is possible to specify a formula in the field catalog instead of a value (BIND_TABLE)

git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@432 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-09-11 22:07:48 +00:00
Ivan Femia
805472ee61 Ready to test #289 new parameter in the table setting
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@431 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-09-11 21:07:09 +00:00
Rene Turnheim
efc9e39f11 Fixed #287 issue. Correct some old problems with langu="1" and add new functions as options for converter:
Hide column
No header
No subtotal
No filter
This can later be added to bind_alv method.

git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@429 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-08-11 18:48:00 +00:00
Stefan Schmöcker
efedac0571 #284: Added support of reading XLSX-Files where the formulae are not stated explicitly but by reference to another cell holding a reference formula. Thanks to David for supplying the method to shift a formula to another cell.
Enhanced Demoreport 6 to demonstrate how this new method can be used in other circumstances then reading in an EXCEL-sheet


set to test #268:  Changed unit-test to make use of the extended functionality in ZCX_EXCEL

git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@428 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-08-11 10:43:02 +00:00
Stefan Schmöcker
44fa9a6558 Preparations to advance #268
Adding messageclass to enable multilingual exceptions and messages and better cross-referencing.
Enhancing ZCX_EXCEL to have a substitute for non-classbased "message .... raising"
and to enable unittests that are independant of logonlanguage when checking exceptions raised this way.

git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@427 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-08-10 21:32:38 +00:00
Gregor Wolf
5035be62e6 Ready to test #271 used standard image from transaction SMW0
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@426 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-07-15 18:08:24 +00:00
Gregor Wolf
7d41f42521 Ready to test #271 used standard image from transaction SMW0
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@425 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-07-15 17:58:40 +00:00
Alessandro Iannacci
7cb0888b86 Excel of demo 39 has validation issue ready to test #276
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@423 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-06-19 16:12:22 +00:00
Gregor Wolf
9448918fa0 Add unit test to ZCL_EXCEL_COMMON=>DESCRIBE_STRUCTURE and fix empty fieldname for DDIC element
Ready to test #270 ZCL_EXCEL_COMMON=>DESCRIBE_STRUCTURE not covered in unit test

git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@422 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-05-24 10:45:23 +00:00
Gregor Wolf
d84f04f8ac Add unit test for issue #241 Error in ZCL_EXCEL_COMMON=>CONVERT_RANGE2COLUMN_A_ROW
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@421 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-05-24 09:20:06 +00:00
Gregor Wolf
41a2b67b0a Fixed failing unit test of ZCL_EXCEL_COMMON
Ready to test #268

git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@420 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-05-20 20:21:16 +00:00
Gregor Wolf
43ebf7dee1 Update Slinkees of Domains to current SAPlink format
ready to test #267

git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@419 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-05-11 22:53:58 +00:00
Ivan Femia
e6ce67fc32 Fix an error with not characters values in set_cell method (issue #162)
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@417 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-04-09 08:01:05 +00:00
Ivan Femia
9528905a07 ready to test #162 Adding Stefan suggestion and adapting DEMO14
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@415 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-04-07 11:38:55 +00:00
Ivan Femia
9a3096cb9b ready to test #257
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@414 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-04-07 10:08:22 +00:00
Ivan Femia
7d5635ec6d Ready to test #259 Fix in classes ZCL_EXCEL_AUTOFILTERS, ZCL_EXCEL_AUTOFILTER, ZCL_EXCEL_WORKSHEET, ZCL_EXCEL_WRITER_2007 and ZCL_EXCEL_CONVERTER
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@413 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-04-07 10:06:59 +00:00
Gregor Wolf
a3749ac918 Ready to test #259 replaced function module call GET_DYNP_VALUE in the F4_PATH method of ZDEMO_EXCEL_OUTPUTOPT_INCL by DYNP_VALUES_READ
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@412 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-04-06 18:02:05 +00:00
Gregor Wolf
b483d68e18 Ready to test #258 - Changed domain of data elements ZEXCEL_RANGE_GUID and ZEXCEL_CELL_STYLE to UUID
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@411 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-04-04 19:24:03 +00:00
Alessandro Iannacci
047183e848 Solution to issue #256
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@409 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-03-21 17:53:12 +00:00
Gregor Wolf
c1f6d37498 Issue #194: Replace REGEX to split Column & Row with method from the common class in LOAD_WORKSHEET Method of ZCL_EXCEL_READER_2007.
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@407 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-02-25 12:25:39 +00:00
Stefan Schmöcker
d4c658e856 set to test #246
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@406 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-01-29 21:59:27 +00:00
Gregor Wolf
f4f6d84900 German translation for calendar example
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@404 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-01-03 10:34:18 +00:00
Gregor Wolf
2de54c6cbb Support also landscape output for the calendar demo
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@403 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2013-01-03 10:22:31 +00:00
Stefan Schmöcker
5c0c447d6d Set to test #246 - minor error in ZCL_EXCEL_COMMON->CONVERT_COLUMN2INT
Also normalized code for issue 230 and added 2 exceptioncalls for errors not handled so far

git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@402 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2012-12-29 12:42:09 +00:00
Gregor Wolf
906f802987 Updated ZDEMO_EXCEL33 to get a short file that allows easy debugging #230
git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@401 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
2012-12-21 21:11:41 +00:00