Excel-Writer-XLSX-1.15/0000755000076500000240000000000015061323123013323 5ustar JohnstaffExcel-Writer-XLSX-1.15/LICENSE_GPL_1.00000644000076500000240000003034315061072626015424 0ustar Johnstaff GNU GENERAL PUBLIC LICENSE Version 1, February 1989 Copyright (C) 1989 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The license agreements of most software companies try to keep users at the mercy of those companies. By contrast, our General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too. When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as "you". 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy. 2. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option). c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License. d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms. 3. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, b) accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or, c) accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.) Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system. 4. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance. 5. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. 7. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation. 8. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to humanity, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19xx name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (a program to direct compilers to make passes at assemblers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice That's all there is to it! Excel-Writer-XLSX-1.15/bin/0000755000076500000240000000000015061323121014071 5ustar JohnstaffExcel-Writer-XLSX-1.15/bin/extract_vba0000755000076500000240000000577014424212124016334 0ustar Johnstaff#!/usr/bin/perl ####################################################################### # # extract_vba - A utility to extract a vbaProject.bin binary from an # Excel 2007+ xlsm file for insertion into an Excel::Writer::XLSX file. # # reverse('©'), September 2007, John McNamara, jmcnamara@cpan.org # # Documentation after __END__ # use strict; use warnings; use Getopt::Long; use Pod::Usage; use Archive::Zip; # Ignore Archive::Zip error messages. Use its return codes only. Archive::Zip::setErrorHandler( sub { } ); my $help = 0; my $filename = $ARGV[0]; my $vba_project = 'vbaProject.bin'; # Use Getopt to read the command-line and Pod::Usage to handle usage # and documentation. GetOptions( 'help|?' => \$help, ) or pod2usage( 2 ); pod2usage( -verbose => 2 ) if $help; pod2usage() if @ARGV == 0 && -t STDIN; # Use Archive::Zip to handle the Excel xlsm/zip file. my $zip = Archive::Zip->new(); my $error = $zip->read( $filename ); if ( $error == 3 ) { die "File '$filename' doesn't appear to be an 'xlsxm/zip' file.\n"; } elsif ( $error != 0 ) { die "Couldn't read '$filename': $!.\n"; } # Extract the vbaProject.bin from the Excel xlsm/zip file. $error = $zip->extractMemberWithoutPaths( 'xl/' . $vba_project ); if ( !$error ) { print "Extracted '$vba_project' successfully\n"; } else { die "Failed to extract '$vba_project' from $filename.\n"; } # The mod data on vbaProject.bin isn't generally set correctly in the xlsm/zip # file. This can cause issues on Windows so reset it to the current data. my $mtime = time; utime $mtime, $mtime, $vba_project; __END__ =head1 NAME extract_vba - A utility to extract a VBA project from an Excel 2007+ xlsm file. =head1 DESCRIPTION This utility is used to extract the VBA project binary from an Excel 2007+ xlsm file. The VBA project can then be added to an L file to enable it to have macros. An C file is a version of an Excel C file that contains an additional VBA project binary file. The C file format is a collection of mainly XML files in a ZIP container. The extracted VBA project is an OLE Compound Document in binary format. It is named C and is generally located in the C directory of the C file. See the C section of the L documentation for more details. Note: you can also extract the VBA project from an C file using the standard Linux C command: unzip -j macro01.xlsm xl/vbaProject.bin On Windows you can use any suitable Unzip application. =head1 SYNOPSIS $ extract_vba file.xlsm Extracted 'vbaProject.bin' successfully $ extract_vba -h # For help. =head1 OPTIONS =over 4 =item B<--help or -h> Print the help documentation. =back =head1 AUTHOR John McNamara jmcnamara@cpan.org =head1 VERSION Version 0.01. =head1 COPYRIGHT (c) MMXV, John McNamara. All Rights Reserved. This program is free software. It may be used, redistributed and/or modified under the same terms as Perl itself. =cut Excel-Writer-XLSX-1.15/Changelog.md0000644000076500000240000007766515061322031015556 0ustar Johnstaff# Changelog This is a changelog for Excel::Writer::XLSX. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [1.15] - 2025-11-12 ### Added - Add the option to position custom data labels in the same way that the data labels can be positioned for the entire series. - Add border, fill, gradient and pattern formatting options for chart titles and also chart axis titles. - Added documentation for the Worksheet `autofit()` method and the Utility `xl_cell_autofit_width()` function. ### Fixed - Fix failed match for range string in conditional format. Strings used in a cell equality must be quoted. In order to ensure this there is a check for non-range/non-numeric strings. However this test wasn't anchored properly and gave a false positive. Issue [#312](https://github.com/jmcnamara/excel-writer-xlsx/issues/312). - Fixed an issue where `set_row()` with the default height of 15 was ignored if `set_default_row()` was also used. - Fixed issue with 0 DPI in PNG images. ## [1.14] - 2024-10-21 ### Fixed - Cleaned up release tarball to remove editor dot files. ## [1.13] - 2024-10-13 ### Fixed - Fixed issue with html color for border colors. Issue [#302](https://github.com/jmcnamara/excel-writer-xlsx/issues/302) and [#305](https://github.com/jmcnamara/excel-writer-xlsx/issues/305). ## [1.12] - 2024-02-26 ### Added - Added support for embedding images into worksheets with worksheet `embed_image()`. This can be useful if you are building up a spreadsheet of products with a column of images for each product. Embedded images move with the cell so they can be used in worksheet tables or data ranges that will be sorted or filtered. This functionality is the equivalent of Excel's menu option to insert an image using the option to "Place in Cell" which is available in Excel 365 versions from 2023 onwards. - Added support for Excel 365 `IMAGE()` future. - Added trendline equation formatting for Charts. - Added support for leader lines to all chart types. - Added chart option to display `N/A` as empty cells. - Add support for `invert_if_negative` color option in Charts. - Added worksheet `very_hidden()` method to hide a worksheet in a way that it can only be unhidden by VBA. Feature Request [#228](https://github.com/jmcnamara/excel-writer-xlsx/issues/228). ### Fixed - Fixed indentation and alignment property mismatch. Fix issue where a horizontal alignment format was ignored if the indentation was also set. ## [1.11] - 2023-03-19 ### Added - Added support for simulated worksheet `autofit()`. - Refactored internal column property handling to allow column ranges to be overridden (a common UX expectation). - Add `quote_prefix` format property. ### Fixed - Add fix for forward/backward slash issue on Windows perl builds. Possibly introduced by a change in File::Find. Issue [#284](https://github.com/jmcnamara/excel-writer-xlsx/issues/284) - Fix for duplicate number formats. Issue [#283](https://github.com/jmcnamara/excel-writer-xlsx/issues/283) - Add fix for worksheets with tables and background images. - Replace/fix the worksheet protection password algorithm so that is works correctly for strings over 24 chars. ## [1.10] - 2022-12-30 ### Added - Add support for new Excel 365 dynamic functions. ## [1.09] - 2021-05-14 ### Added - Added support for background images in worksheets. See set_background(). - Added support for GIF image files (and in Excel 365, animated GIF files). - Added support for pixel sizing in set_row() and set_column() via new functions called set_row_pixels() and set_column_pixels(). - Added initial support for dynamic arrays in formulas. ## [1.08] - 2021-03-31 ### Added - Added ability to add accessibility options "description" and "decorative" to images via insert_image(). - Added the workbook read_only_recommended() method to set the Excel "Read-only Recommended" option that is available when saving a file. - Added option to set a chart crossing to 'min' as well as the existing 'max' option. The 'min' option isn't available in the Excel interface but can be enabled via VBA. - Added option to unprotect ranges in protected worksheets. - Added check, and warning, for worksheet tables with no data row. Either with or without a header row. - Added ignore_errors() worksheet method to ignore Excel worksheet errors/warnings in user defined ranges. ### Fixed - Fixed issue where pattern formats without colors where given a default black fill color. - Fix issue where custom chart data labels didn't inherit the position for the data labels in the series. - Fixed issue with relative url links in images. - Fixed issue where headers/footers were restricted to 254 characters instead of 255. ## [1.07] - 2020-08-06 ### Added - Added support for Border, Fill, Pattern and Gradient formatting to chart data labels and chart custom data labels. ## [1.06] - 2020-08-03 ### Fixed - Fix for issue where array formulas weren't included in the output file for certain ranges/conditions. ## [1.05] - 2020-07-30 ### Added - Added support for custom data labels in charts. ## [1.04] - 2020-05-31 ### Added - Added support for "stacked" and "percent_stacked" Line charts. ### Fixed - Fix for worksheet objects (charts and images) that are inserted with an offset that starts in a hidden cell. - Fix for issue with default worksheet VBA codenames. ### Removed - Removed error in add_worksheet() for sheet name "History" which is a reserved name in English version of Excel. However, this is an allowed worksheet name in some Excel variants so the warning has been turned into a documentation note instead. ## [1.03] - 2019-12-26 ### Added - Fix for duplicate images being copied to an Excel::Writer::XLSX file. Excel uses an optimization where it only stores one copy of a repeated/duplicate image in a workbook. Excel::Writer::XLSX didn't do this which meant that the file size would increase when then was a large number of repeated images. This release fixes that issue and replicates Excel's behavior. ## [1.02] - 2019-11-07 ### Added - Added support for hyperlinks in worksheet images. - Increased allowable url length from 255 to 2079 characters, as allowed in more recent versions of Excel. ## [1.01] - 2019-10-28 ### Added - Added support for stacked and East Asian vertical chart fonts. - Added option to control positioning of charts or images when cells are resized. - Added support for combining Pie/Doughnut charts. ### Fixed - Fixed sizing of cell comment boxes when they cross columns/rows that have size changes that occur after the comment is written. Comments should now behave like other worksheet objects such as images and charts. - Fix for structured reference in chart ranges. ## [1.00] - 2019-04-07 ### Fixed - Fixed issue where images that started in hidden rows/columns weren't placed correctly in the worksheet. - Fixed the mime-type reported by system "file(1)". The mime-type reported by "file --mime-type"/magic was incorrect for Excel::Writer::XLSX files since it expected the "[Content_types]" to be the first file in the zip container. ## [0.99] - 2019-02-10 ### Added - Added font and font_size parameters to write_comment(). - Allow formulas in date field of data_validation(). - Added top_left chart legend position. - Added legend formatting options. - Added set_tab_ratio() method to set the ratio between the worksheet tabs and the horizontal slider. - Added worksheet hide_row_col_headers() method to turn off worksheet row and column headings. - Add functionality to align chart category axis labels. ### Fixed - Fix for issue with special characters in worksheet table functions. - Fix handling of 'num_format': '0' in duplicate formats. ## [0.98] - 2018-04-14 ### Added - Set the xlsx internal file member datetimes to 1980-01-01 00:00:00 like Excel so that apps can produce a consistent binary file once the workbook set_properties() created date is set. Feature request [#168](https://github.com/jmcnamara/excel-writer-xlsx/issues/168). ## [0.97] - 2018-04-10 ### Added - Added Excel 2010 data bar features such as solid fills and control over the display of negative values. - Added default formatting for hyperlinks if none is specified. The format is the Excel hyperlink style so links change color after they are clicked. ### Fixed - Fixed missing plotarea formatting in pie/doughnut charts. ## [0.96] - 2017-09-16 ### Added - Added icon sets to conditional formatting. Feature request [#116](https://github.com/jmcnamara/excel-writer-xlsx/issues/116). ## [0.95] - 2016-06-13 ### Added - Added workbook set_size() method. Feature request [#59](https://github.com/jmcnamara/excel-writer-xlsx/issues/59). ## [0.94] - 2016-06-07 ### Added - Added font support to chart tables. Feature request [#96](https://github.com/jmcnamara/excel-writer-xlsx/issues/96). ## [0.93] - 2016-06-07 ### Added - Added trendline properties: intercept, display_equation and display_r_squared. Feature request [#153](https://github.com/jmcnamara/excel-writer-xlsx/issues/153). ## [0.92] - 2016-06-01 ### Fixed - Fix for insert_image issue when handling images with zero dpi. ## [0.91] - 2016-05-31 ### Added - Add set_custom_property() workbook method to set custom document properties. ## [0.90] - 2016-05-13 ### Added - Added get_worksheet_by_name() workbook method to retrieve a worksheet in a workbook by name. Feature request [#124](https://github.com/jmcnamara/excel-writer-xlsx/issues/124). ### Fixed - Fixed issue where internal file creation and modification dates where in the local timezone instead of UTC. Issue [#162](https://github.com/jmcnamara/excel-writer-xlsx/issues/162). - Fixed issue with "external:" urls with space in sheetname. - Fixed issue where Unicode full-width number strings were treated as numbers in write(). Issue [#160](https://github.com/jmcnamara/excel-writer-xlsx/issues/160). ## [0.89] - 2016-04-16 ### Added - Added write_boolean() worksheet method to write Excel boolean values. ## [0.88] - 2016-01-14 ### Added - Added transparency option to solid fills in chart areas. - Added options to configure chart axis tick placement. Feature request [#158](https://github.com/jmcnamara/excel-writer-xlsx/issues/158). ## [0.87] - 2016-01-12 ### Added - Added chart pattern and gradient fills. - Added option to set chart tick interval. - Add checks for valid and non-duplicate worksheet table names. - Added support for table header formatting and a fix for wrapped lines in the header. ## [0.86] - 2015-10-19 ### Fixed - Fix to allow chartsheets to support combined charts. - Fix for images with negative offsets. ### Added - Allow hyperlinks longer than 255 characters when the link and anchor are each less than or equal to 255 characters. - Added hyperlink_base document property. - Added option to allow data validation input messages with the ‘any’ validate parameter. Issue [#144](https://github.com/jmcnamara/excel-writer-xlsx/issues/144). - Added "stop if true" feature to conditional formatting. Issue [#138](https://github.com/jmcnamara/excel-writer-xlsx/issues/138). - Added better support and documentation for html colors throughout the module. The use of the Excel97 color palette is supported for backward compatibility but deprecated. Issue [#97](https://github.com/jmcnamara/excel-writer-xlsx/issues/97). ## [0.85] - 2015-08-05 ### Fixed - Fixes for new redundant sprintf arguments warnings in perl 5.22. Issue [#134](https://github.com/jmcnamara/excel-writer-xlsx/issues/134). - Fix url encoding of links to external files and dirs. ## [0.84] - 2015-04-21 ### Added - Added support for chart axis display units (thousands, million, etc.). - Added option to set printing in black and white. Issue [#125](https://github.com/jmcnamara/excel-writer-xlsx/issues/125). - Added chart styles example. - Added gradient fill support. - Added support for clustered charts. - Added support for boolean error codes. 0.83 2015-3-17 - Added option to combine two different chart types. For example to create a Pareto chart. 0.82 2015-3-14 - Added extra documentation on how to handle VBA macros and added automatic and manual setting of workbook and worksheet VBA codenames. Issue [#60](https://github.com/jmcnamara/excel-writer-xlsx/issues/60). - Fix for set_start_page() for values > 1. - Fix to copy user defined chart properties, such as trendlines, so that they aren't overwritten. Issue [#121](https://github.com/jmcnamara/excel-writer-xlsx/issues/121). - Added column function_value option to add_table to allow function value to be set. - Allow explicit text categories in charts. Issue [#102](https://github.com/jmcnamara/excel-writer-xlsx/issues/102) - Fix for column/bar gap/overlap on y2 axis. Issue [#113](https://github.com/jmcnamara/excel-writer-xlsx/issues/113). ## [0.81] - 2014-11-01 ### Added - Added chart axis line and fill properties. ## [0.80] - 2014-10-29 ### Added - Chart Data Label enhancements. Added number formatting, font handling (issue #106), separator (issue #107) and legend key. - Added chart specific handling of data label positions since not all positions are available for all chart types. Issue [#110](https://github.com/jmcnamara/excel-writer-xlsx/issues/110). ## [0.79] - 2014-10-16 ### Added - Added option to add images to headers and footers. - Added option to not scale header/footer with page. ### Fixed - Fixed issue where non 96dpi images were not scaled properly in Excel. - Fix for issue where X axis title formula was overwritten by the Y axis title. ## [0.78] - 2014-09-28 ### Added - Added Doughnut chart with set_rotation() and set_hole_size() methods. - Added set_rotation() method to Pie charts. - Added set_calc_mode() method to control automatic calculation of formulas when worksheet is opened. ## [0.77] - 2014-05-06 ### Fixed - Fix for incorrect chart offsets in insert_chart() and set_size(). Reported by Kevin Gilpin. ## [0.76] - 2013-12-31 ### Added - Added date axis handling to charts. - Added support for non-contiguous chart ranges. ### Fixed - Fix to remove duplicate set_column() entries. ## [0.75] - 2013-12-02 ### Added - Added interval unit option for category axes. ### Fixed - Fix for axis name font rotation. Issue [#83](https://github.com/jmcnamara/excel-writer-xlsx/issues/83). - Fix for several minor issues with Pie chart legends. ## [0.74] - 2013-11-17 ### Fixed - Improved defined name validation. Issue [#82](https://github.com/jmcnamara/excel-writer-xlsx/issues/82). ### Added - Added set_title() option to turn off automatic title. Issue [#81](https://github.com/jmcnamara/excel-writer-xlsx/issues/81). - Allow positioning of plotarea, legend, title and axis names. Issue [#80](https://github.com/jmcnamara/excel-writer-xlsx/issues/80). ### Fixed - Fix for modification of user params in conditional_formatting(). Issue [#79](https://github.com/jmcnamara/excel-writer-xlsx/issues/79). - Fix for star style markers. ## [0.73] - 2013-11-08 ### Added - Added custom error bar option to charts. ### Fixed - Fix for tables added in non-sequential order. - Fix for scatter charts with markers on non-marker series. ## [0.72] - 2013-08-28 ### Fixed - Fix for charts and images that cross rows and columns that are hidden or formatted but which don’t have size changes. ## [0.71] - 2013-08-24 ### Fixed - Fixed issue in image handling. - Added fix to ensure formula calculation on load regardless of Excel version. ## [0.70] - 2013-07-30 ### Fixed - Fix for rendering images that are the same size as cell boundaries. GitHub issue #70. - Added fix for inaccurate column width calculation. ### Added - Added Chart line smoothing option. ## [0.69] - 2013-06-12 ### Added - Added chart font rotation property. Mainly for use with date axes to make the display more compact. ### Fixed - Fix for 0 data in Worksheet Tables. [#65](https://github.com/jmcnamara/excel-writer-xlsx/issues/65). Reported by David Gang. ## [0.68] - 2013-06-06 ### Fixed - Fix for issue where shapes on one worksheet corrupted charts on a subsequent worksheet. [#52](https://github.com/jmcnamara/excel-writer-xlsx/issues/52). - Fix for issue where add_button() invalidated cell comments in the same workbook. [#64](https://github.com/jmcnamara/excel-writer-xlsx/issues/64). ## [0.67] - 2013-05-06 ### Fixed - Fix for set_selection() with cell range. ## [0.66] - 2013-04-12 ### Fixed - Fix for issue with image scaling. ## [0.65] - 2012-12-31 ### Added - Added options to format series Gap/Overlap for Bar/Column charts. ## [0.64] - 2012-12-22 ### Added - Added the option to format individual points in a chart series. This allows Pie chart segments to be formatted. ## [0.63] - 2012-12-19 ### Added - Added Chart data tools such as: Error Bars Up-Down Bars High-Low Lines Drop Lines. See the chart_data_tool.pl example. ## [0.62] - 2012-12-12 ### Added - Added option for adding a data table to a Chart X-axis. See output from chart_data_table.pl example. ## [0.61] - 2012-12-11 ### Added - Allow a cell url string to be over written with a number or formula using a second write() call to the same cell. The url remains intact. Issue [#48](https://github.com/jmcnamara/excel-writer-xlsx/issues/48). - Added set_default_row() method to set worksheet default values for rows. - Added Chart set_size() method to set the chart dimensions. ## [0.60] - 2012-12-05 ### Added - Added Excel form buttons via the worksheet insert_button() method. This allows the user to tie the button to an embedded macro imported using add_vba_project(). The portal to the dungeon dimensions is now fully open. ### Fixed - Fix escaping of special character in URLs to write_url(). Issue [#45](https://github.com/jmcnamara/excel-writer-xlsx/issues/45). - Fix for 0 access/modification date on vbaProject.bin files extracted using extract_vba. The date isn't generally set correctly in the source xlsm file but this caused issues on Windows. ## [0.59] - 2012-11-26 ### Added - Added macro support via VBA projects extracted from existing Excel xlsm files. User defined functions can be called from worksheets and macros can be called by the user but they cannot, currently, be linked to form elements such as buttons. ## [0.58] - 2012-11-23 ### Added - Added chart area and plot area formatting. ## [0.57] - 2012-11-21 ### Added - Add major and minor axis chart gridline formatting. ## [0.56] - 2012-11-18 ### Fixed - Fix for issue where chart creation order had to be the same as the insertion order or charts would be out of sync. Frederic Claude Sievert and Hurricup. Issue [#42](https://github.com/jmcnamara/excel-writer-xlsx/issues/42). - Fixed issue where gridlines didn't work in Scatter and Stock charts. Issue [#41](https://github.com/jmcnamara/excel-writer-xlsx/issues/41). - Fixed default XML encoding to avoid/solve various issues with XML encoding created by the XML changes in version 0.51. Issue [#43](https://github.com/jmcnamara/excel-writer-xlsx/issues/43). ## [0.55] - 2012-11-10 ### Added - Added Sparklines. ### Fixed - Fix for issue with "begins with" and "ends with" Conditional Formatting. Issue [#40](https://github.com/jmcnamara/excel-writer-xlsx/issues/40). ## [0.54] - 2012-11-05 ### Added - Added font manipulation to Charts. - Added number formats to Chart axes. - Added Radar Charts. ### Fixed - Fix for XML encoding in write_url() internal/external links. Issue [#37](https://github.com/jmcnamara/excel-writer-xlsx/issues/37). ## [0.53] - 2012-10-10 ### Fixed - Fix for broken MANIFEST file. ## [0.52] - 2012-10-09 ### Fixed - Added dependency on Date::Calc to xl_parse_date.t test. Closes #30 and RT#79790. - Fix for XML encoding of URLs. Closes #31. ### Added - Refactored XMLWriter into a single class. This breaks the last remaining ties to XML::Writer to allow for future additions and optimizations. Renamed methods for consistency. ## [0.51] - 2012-09-16 ### Added - Speed optimizations. This release contains a series of optimizations aimed at increasing the speed of Excel::Writer::XLSX. The overall improvement is around 66%. See the SPEED AND MEMORY USAGE section of the documentation. - Memory usage optimizations. This fixes an issue where the memory used for the worksheet data tables was freed but then brought back into usage due to the use of an array as the base data structure. This meant that the memory usage still continued to grow with large row counts. ### Fixed - Added warning about Excel limit to 65,530 urls per worksheet. - Limit URLs to Excel's limit of 255 chars. Fixes Issue [#26](https://github.com/jmcnamara/excel-writer-xlsx/issues/26). - Fix for whitespace in urls. Fixes Issue [#25](https://github.com/jmcnamara/excel-writer-xlsx/issues/25). - Fix for solid fill of type 'none' is chart series. Closes issue #27 reported on Stack Overflow. - Modified write_array_formula() to apply format over full range. Fixes issue #18. - Fix for issue with chart formula referring to non-existent sheet name. It is now a fatal error to specify a chart series formula that refers to an non-existent worksheet name. Fixes issue #17. ## [0.50] - 2012-09-09 ### Added - Added option to add secondary axes to charts. Thanks to Eric Johnson and to Foxtons for sponsoring the work. - Added add_table() method to add Excel tables to worksheets. ### Fixed - Fix for right/left auto shape connection when destination is left of source shape. Thanks to Dave Clarke for fix. - Fix for issue #16. Format::copy() method not protecting values. The Format copy() method over-writes certain new properties that weren't in Spreadsheet::WriteExcel. This fixes the issue by storing and restoring the properties during copy. - Fix for issue #15: write_url with local sub directory. Local sub-directories were incorrectly treated as file:// external. - Fix for for issue #14: Non-numeric data in chart value axes are now converted to zero in chart data cache, as required by Excel. ## [0.49] - 2012-07-12 ### Added - Added show_blanks_as() chart method to control the display of blank data. - Added show_hidden_data() chart method to control the display of data in hidden rows and columns. ### Fixed - Added fix for fg/bg colors in conditional formats which are shared with cell formats. Reported by Patryk Kwiatkowski. - Fix for xl_parse_time() with hours > 24. Github issue #11. - Fixed lc() warning in Utility.pm in recent perls. Github issue #10. - Fixed issue with non-integer shape dimensions. Thanks Dave Clarke. - Fixed error handling for shape connectors. Thanks Dave Clarke. ## [0.48] - 2012-06-25 ### Added - Added worksheet shapes. A major new feature. Patch, docs, tests and example programs by Dave Clarke. - Added stacked and percent_stacked chart subtypes to Area charts. ### Fixed - Added fix for chart names in embedded charts. Reported by Matt Freel. - Fixed bug with Unicode characters in rich strings. Reported by Michiel van Rhee. ## [0.47] - 2012-04-10 ### Added - Additional conditional formatting options such as color, type and value for 2_color_scale, 3_color_scale and data_bar. Added option for non- contiguous data ranges as well. - Additional chart data label parameters such as position, leader lines and percentage. Initial patch by George E. Tarrant III. ### Fixed - Fixed for Autofilter filter_column() offset bug reported by Krishna Rajendran. - Fix for write_url() where url contains invalid whitespace, RT #75808, reported by Oleg G. The write_url() method now throws a warning and rejects the invalid url to avoid file corruption. ## [0.46] - 2012-02-10 ### Fixed - Fix for x-axis major/minor units in scatter charts. Reported by Carey Drake. ## [0.45] - 2012-01-09 ### Fixed - Changed from File::Temp tempdir() to newdir() to cleanup the temp dir at object destruction rather than the program exit. Also improved error reporting when mkdir() fails. Reported by Kevin Ruscoe. - Fix to escape control characters in strings. Reported by Kevin Ruscoe. ## [0.44] - 2012-01-05 ### Fixed - Fix for missing return value from Workbook::close() with filehandles. RT 73724. Reported and patched by Charles Bailey. - Fixed support special filename/filehandle '-'. RT 73424. Reported by YuvalL and Charles Bailey. - Fix for non-working reverse x_axis with Scatter charts. Reported by Viqar Abbasi. ## [0.43] - 2011-12-18 ### Added - Added chart axis label position option. - Added invert_if_negative option for chart series fills. ## [0.42] - 2011-12-17 ### Fixed - Fix for set_optimization() where first row isn't 0. Reported by Giulio Orsero. - Fix to preserve whitespace in inline strings. Reported by Giulio Orsero. ## [0.41] - 2011-12-10 ### Fixed - Increased IO::File requirement to 1.14 to prevent taint issues on some 5.8.8/5.8.6 platforms. ## [0.40] - 2011-12-07 ### Fixed - Fix for unreadable xlsx files when generator program has -l on the commandline or had redefined $/. Github issue #7. Reported by John Riksten. ## [0.39] - 2011-12-03 ### Fixed - Fix for spurious Mac ._Makefile.PL in the distro which prevented automated testing and installation. Github issue #5. Reported by Tobias Oetiker. - Fix for failing test sub_convert_date_time.t due to extra precision on longdouble perls. RT #71762 Reported by Douglas Wilson. ## [0.38] - 2011-12-03 ### Added - Backported from perl 5.10.0 to perl 5.8.2. You are killing me guys. Killing me. ## [0.37] - 2011-12-02 ### Added - Added additional axis options: minor and major units, log base and axis crossing. ## [0.36] - 2011-11-29 ### Added - Added "min" and "max" options to axis ranges via set_x_axis() and set_y_axis. ## [0.35] - 2011-11-27 ### Added - Added Scatter chart subtypes: markers_only (the default), straight_with_markers, straight, smooth_with_markers and smooth. ## [0.34] - 2011-11-04 ### Added - Added set_optimization() method to reduce memory usage for very large data sets. ## [0.33] - 2011-10-28 ### Added - Added addition conditional formatting types: cell, date, time_period, text, average, duplicate, unique, top, bottom, blanks, no_blanks, errors, no_errors, 2_color_scale, 3_color_scale, data_bar and formula. ## [0.32] - 2011-10-20 ### Fixed - Fix for format alignment bug. Reported by Roderich Schupp. ## [0.31] - 2011-10-18 ### Added - Added basic conditional formatting via the conditional_format() Worksheet method. More conditional formatting types will follow. - Added conditional_format.pl example program. ## [0.30] - 2011-10-06 ### Added - Added stacked and percent_stacked chart subtypes to Bar and Column chart types. ## [0.29] - 2011-10-05 ### Added - Added the merge_range_type() method for finer control over the types written using merge_range(). ## [0.28] - 2011-10-04 ### Added - Added default write_formula() value for compatibility with Google docs. - Updated Example.pm docs with Excel 2007 images. ## [0.27] - 2011-10-02 ### Added - Excel::Writer::XLSX is now 100% functionally and API compatible with Spreadsheet::WriteExcel. - Added outlines and grouping functionality. - Added outline.pl and outline_collapsed.pl example programs. ## [0.26] - 2011-10-01 ### Added - Added cell comment methods and options. Thanks to Barry Downes for providing the interim functionality - Added comments1.pl and comments2.pl example programs. ## [0.25] - 2011-06-16 ### Added - Added option to add defined names to workbooks and worksheets. Added defined_name.pl example program. ### Fixed - Fix for fit_to_pages() with zero values. Reported by Aki Huttunen. ## [0.24] - 2011-06-11 ### Added - Added data validation and data_validate.pl example. - Added the option to turn off data series in chart legends. ## [0.23] - 2011-05-26 ### Fixed - Fix for charts ranges containing empty values. ## [0.22] - 2011-05-22 ### Added - Added 'reverse' option to set_x_axis() and set_y_axis() in charts. ## [0.21] - 2011-05-11 ### Fixed - Fixed support for filehandles. ### Added - Added write_to_scalar.pl and filehandle.pl example programs. ## [0.20] - 2011-05-10 ### Fixed - Fix for programs running under taint mode. ### Added - Added set_tempdir(). ### Fixed - Fix for color formatting in chartsheets. ## [0.19] - 2011-05-05 ### Added - Added new chart formatting options for line properties, markers, trendlines and data labels. See Chart.pm. - Added partial support for insert_image(). - Improved backward compatibility for deprecated methods store_formula() and repeat_formula(). ### Fixed - Fixed missing formatting for array formulas. Reported by Cyrille Gourves. - Fixed issue with chart scaling that caused "unreadable content" Excel error. ## [0.18] - 2011-04-07 ### Added - Added set_properties() method to add document properties. Added properties.pl and tests. ## [0.17] - 2011-04-04 ### Added - Added charting feature. See Chart.pm. ### Fixed - Fix for file corruption issue when there are more than 10 custom colors. Reported by Brian R. Landy. ## [0.16] - 2011-03-04 ### Fixed - Clarified support for deprecated methods in documentation and added backward compatible methods in some cases. - Fix for center_horizontally() issue. Reported by Giulio Orsero. - Fix for number like strings getting written as strings instead of numbers. Reported by Giulio Orsero. ## [0.15] - 2011-03-01 ### Fixed - Fix for issues with set_row() not passing on format to cells in the row. Reported by Giulio Orsero. - Fixes for related issue in set_column(). ## [0.14] - 2011-02-26 ### Added - Added write_rich_string() method to write a string with multiple formats. - Added rich_strings.pl example program. - Added set_1904() method for dates with a 1904 epoch. - Added date_time.pl example program. ### Fixed - Fixed issue where leading and trailing whitespace in cell strings wasn't preserved. ## [0.13] - 2011-02-22 ### Added - Added additional page setup methods: set_zoom() right_to_left() hide_zero() set_custom_color() set_tab_color() protect() - Added Cell property methods: set_locked() set_hidden() - Added example programs: hide_sheet.pl protection.pl right_to_left.pl tab_colors.pl ## [0.12] - 2011-02-19 ### Added - Added set_selection() method for selecting cells. ## [0.11] - 2011-02-17 ### Fixed - Fix for temp dirs not been removed after xlsx file creation. http://rt.cpan.org/Ticket/Display.html?id=65816 Reported by Andreas Koenig. ## [0.10] - 2011-02-17 ### Added - Added freeze_panes() and split_panes(). - Added panes.pl example program. ## [0.09] - 2011-02-13 ### Added - Added write_url() for internal and external hyperlinks. - Added hyperlink1+2.pl example programs. ## [0.08] - 2011-02-03 ### Added - Added autofilter(), column_filter() and column_filter_list() methods. - Added autofilter.pl example program. ## [0.07] - 2011-01-28 ### Added - Added additional Page Setup methods. set_page_view() repeat_rows() repeat_columns() hide_gridlines() print_row_col_headers() print_area() print_across() fit_to_pages() set_start_page() set_print_scale() set_h_pagebreaks() set_v_pagebreaks() - Added headers.pl example program. ## [0.06] - 2011-01-19 ### Fixed - Added fix for XML characters in attributes. Reported by John Roll. ### Added - Added initial Page Setup methods. set_landscape() set_portrait() set_paper() center_horizontally() center_vertically() set_margins() set_header() set_footer() ## [0.05] - 2011-01-04 ### Added - Added support for array_formulas. See the docs for write_array_formula() and the example program. ## [0.04] - 2011-01-03 ### Added - Added merge_range() for merging cells. With tests and examples. ## [0.03] - 2011-01-03 ### Added - Optimizations. The module is now 100% faster. ## [0.02] - 2010-10-12 ### Fixed - Fixed dependencies in Makefile. ## [0.01] - 2010-10-11 ### Added - First CPAN release. Excel-Writer-XLSX-1.15/MANIFEST0000644000076500000240000023714115061323123014464 0ustar Johnstaff.typos.toml bin/extract_vba Changelog.md CONTRIBUTING.md examples/a_simple.pl examples/array_formula.pl examples/autofilter.pl examples/autofit.pl examples/background.pl examples/bug_report.pl examples/cgi.pl examples/chart_area.pl examples/chart_bar.pl examples/chart_clustered.pl examples/chart_column.pl examples/chart_combined.pl examples/chart_data_labels.pl examples/chart_data_table.pl examples/chart_data_tools.pl examples/chart_doughnut.pl examples/chart_gauge.pl examples/chart_line.pl examples/chart_pareto.pl examples/chart_pie.pl examples/chart_radar.pl examples/chart_scatter.pl examples/chart_secondary_axis.pl examples/chart_stock.pl examples/chart_styles.pl examples/colors.pl examples/comments1.pl examples/comments2.pl examples/conditional_format.pl examples/data_validate.pl examples/date_time.pl examples/defined_name.pl examples/demo.pl examples/diag_border.pl examples/dynamic_arrays.pl examples/embedded_images.pl examples/filehandle.pl examples/formats.pl examples/gen_examples_pod.pl examples/headers.pl examples/hide_row_col.pl examples/hide_sheet.pl examples/hyperlink1.pl examples/hyperlink2.pl examples/ignore_errors.pl examples/indent.pl examples/lambda.pl examples/macros.pl examples/merge1.pl examples/merge2.pl examples/merge3.pl examples/merge4.pl examples/merge5.pl examples/merge6.pl examples/mod_perl1.pl examples/mod_perl2.pl examples/outline_collapsed.pl examples/outline.pl examples/panes.pl examples/properties.pl examples/protection.pl examples/README examples/regions.pl examples/republic.png examples/rich_strings.pl examples/right_to_left.pl examples/sales.pl examples/sensitivity_label.pl examples/shape_all.pl examples/shape1.pl examples/shape2.pl examples/shape3.pl examples/shape4.pl examples/shape5.pl examples/shape6.pl examples/shape7.pl examples/shape8.pl examples/sparklines1.pl examples/sparklines2.pl examples/stats_ext.pl examples/stats.pl examples/stocks.pl examples/tab_colors.pl examples/tables.pl examples/unicode_2022_jp.pl examples/unicode_2022_jp.txt examples/unicode_8859_11.pl examples/unicode_8859_11.txt examples/unicode_8859_7.pl examples/unicode_8859_7.txt examples/unicode_big5.pl examples/unicode_big5.txt examples/unicode_cp1251.pl examples/unicode_cp1251.txt examples/unicode_cp1256.pl examples/unicode_cp1256.txt examples/unicode_cyrillic.pl examples/unicode_koi8r.pl examples/unicode_koi8r.txt examples/unicode_polish_utf8.pl examples/unicode_polish_utf8.txt examples/unicode_shift_jis.pl examples/unicode_shift_jis.txt examples/vbaProject.bin examples/watermark.pl examples/write_handler1.pl examples/write_handler2.pl examples/write_handler3.pl examples/write_handler4.pl examples/write_to_scalar.pl lib/Excel/Writer/XLSX.pm lib/Excel/Writer/XLSX/Chart.pm lib/Excel/Writer/XLSX/Chart/Area.pm lib/Excel/Writer/XLSX/Chart/Bar.pm lib/Excel/Writer/XLSX/Chart/Column.pm lib/Excel/Writer/XLSX/Chart/Doughnut.pm lib/Excel/Writer/XLSX/Chart/Line.pm lib/Excel/Writer/XLSX/Chart/Pie.pm lib/Excel/Writer/XLSX/Chart/Radar.pm lib/Excel/Writer/XLSX/Chart/Scatter.pm lib/Excel/Writer/XLSX/Chart/Stock.pm lib/Excel/Writer/XLSX/Chartsheet.pm lib/Excel/Writer/XLSX/Drawing.pm lib/Excel/Writer/XLSX/Examples.pm lib/Excel/Writer/XLSX/Format.pm lib/Excel/Writer/XLSX/Package/App.pm lib/Excel/Writer/XLSX/Package/Comments.pm lib/Excel/Writer/XLSX/Package/ContentTypes.pm lib/Excel/Writer/XLSX/Package/Core.pm lib/Excel/Writer/XLSX/Package/Custom.pm lib/Excel/Writer/XLSX/Package/Metadata.pm lib/Excel/Writer/XLSX/Package/Packager.pm lib/Excel/Writer/XLSX/Package/Relationships.pm lib/Excel/Writer/XLSX/Package/RichValue.pm lib/Excel/Writer/XLSX/Package/RichValueRel.pm lib/Excel/Writer/XLSX/Package/RichValueStructure.pm lib/Excel/Writer/XLSX/Package/RichValueTypes.pm lib/Excel/Writer/XLSX/Package/SharedStrings.pm lib/Excel/Writer/XLSX/Package/Styles.pm lib/Excel/Writer/XLSX/Package/Table.pm lib/Excel/Writer/XLSX/Package/Theme.pm lib/Excel/Writer/XLSX/Package/VML.pm lib/Excel/Writer/XLSX/Package/XMLwriter.pm lib/Excel/Writer/XLSX/Shape.pm lib/Excel/Writer/XLSX/Utility.pm lib/Excel/Writer/XLSX/Workbook.pm lib/Excel/Writer/XLSX/Worksheet.pm LICENSE_Artistic_Perl LICENSE_GPL_1.0 Makefile.PL MANIFEST README t/chart/area/sub_write_xml_declaration.t t/chart/bar/sub_write_bar_dir.t t/chart/bar/sub_write_grouping.t t/chart/bar/sub_write_xml_declaration.t t/chart/column/sub_write_xml_declaration.t t/chart/line/sub_write_xml_declaration.t t/chart/pie/sub_write_xml_declaration.t t/chart/scatter/sub_write_xml_declaration.t t/chart/stock/sub_write_xml_declaration.t t/chart/sub_add_series.t t/chart/sub_process_names.t t/chart/sub_write_a_latin.t t/chart/sub_write_auto.t t/chart/sub_write_ax_id.t t/chart/sub_write_ax_pos.t t/chart/sub_write_chart_space.t t/chart/sub_write_cross_ax.t t/chart/sub_write_crosses.t t/chart/sub_write_d_lbls.t t/chart/sub_write_format_code.t t/chart/sub_write_idx.t t/chart/sub_write_label_align.t t/chart/sub_write_label_offset.t t/chart/sub_write_lang.t t/chart/sub_write_layout.t t/chart/sub_write_legend_pos.t t/chart/sub_write_legend.t t/chart/sub_write_major_gridlines.t t/chart/sub_write_marker_size.t t/chart/sub_write_marker_value.t t/chart/sub_write_marker.t t/chart/sub_write_num_cache.t t/chart/sub_write_number_format.t t/chart/sub_write_order.t t/chart/sub_write_orientation.t t/chart/sub_write_page_margins.t t/chart/sub_write_page_setup.t t/chart/sub_write_plot_vis_only.t t/chart/sub_write_pt_count.t t/chart/sub_write_pt.t t/chart/sub_write_series_formula.t t/chart/sub_write_style.t t/chart/sub_write_symbol.t t/chart/sub_write_tick_lbl_pos.t t/chart/sub_write_v.t t/chart/sub_write_xml_declaration.t t/chartsheet/chartsheet_subs.t t/chartsheet/chartsheet01.t t/chartsheet/sub_write_sheet_protection.t t/chartsheet/sub_write_xml_declaration.t t/drawing/drawing_chart_01.t t/drawing/drawing_image_01.t t/drawing/drawing_shape_01.t t/drawing/drawing_shape_02.t t/drawing/drawing_shape_03.t t/drawing/drawing_shape_04.t t/drawing/drawing_shape_05.t t/drawing/drawing_shape_06.t t/drawing/drawing_shape_07.t t/drawing/drawing_shape_08.t t/drawing/sub_write_a_graphic_frame_locks.t t/drawing/sub_write_c_chart.t t/drawing/sub_write_c_nv_graphic_frame_pr.t t/drawing/sub_write_c_nv_pr.t t/drawing/sub_write_col_off.t t/drawing/sub_write_col.t t/drawing/sub_write_ext.t t/drawing/sub_write_pos.t t/drawing/sub_write_row_off.t t/drawing/sub_write_row.t t/drawing/sub_write_xfrm_extension.t t/drawing/sub_write_xfrm_offset.t t/drawing/sub_write_xml_declaration.t t/lib/TestFunctions.pm t/package/app/app01.t t/package/app/app02.t t/package/app/app03.t t/package/app/sub_write_xml_declaration.t t/package/comments/comments_01.t t/package/comments/comments_02.t t/package/comments/sub_write_text_t.t t/package/comments/sub_write_xml_declaration.t t/package/content_types/content_types.t t/package/content_types/sub_write_default.t t/package/content_types/sub_write_override.t t/package/content_types/sub_write_xml_declaration.t t/package/core/core01.t t/package/core/core02.t t/package/core/sub_write_xml_declaration.t t/package/relationships/relationships.t t/package/relationships/sheet_rels.t t/package/relationships/sub_write_xml_declaration.t t/package/shared_strings/shared_strings01.t t/package/shared_strings/shared_strings02.t t/package/shared_strings/sub_write_si.t t/package/shared_strings/sub_write_sst.t t/package/shared_strings/sub_write_xml_declaration.t t/package/styles/styles_01.t t/package/styles/styles_02.t t/package/styles/styles_03.t t/package/styles/styles_04.t t/package/styles/styles_05.t t/package/styles/styles_06.t t/package/styles/styles_07.t t/package/styles/styles_08.t t/package/styles/styles_09.t t/package/styles/sub_write_border.t t/package/styles/sub_write_borders.t t/package/styles/sub_write_cell_style_xfs.t t/package/styles/sub_write_cell_style.t t/package/styles/sub_write_cell_styles.t t/package/styles/sub_write_cell_xfs.t t/package/styles/sub_write_colors.t t/package/styles/sub_write_default_fill.t t/package/styles/sub_write_dxfs.t t/package/styles/sub_write_fills.t t/package/styles/sub_write_font.t t/package/styles/sub_write_fonts.t t/package/styles/sub_write_mru_colors.t t/package/styles/sub_write_num_fmt.t t/package/styles/sub_write_num_fmts.t t/package/styles/sub_write_style_sheet.t t/package/styles/sub_write_style_xf.t t/package/styles/sub_write_xf.t t/package/styles/sub_write_xml_declaration.t t/package/table/sub_write_auto_filter.t t/package/table/sub_write_table_column.t t/package/table/sub_write_table_style_info.t t/package/table/sub_write_xml_declaration.t t/package/table/table01.t t/package/table/table02.t t/package/table/table03.t t/package/table/table04.t t/package/table/table05.t t/package/table/table06.t t/package/table/table07.t t/package/table/table08.t t/package/table/table09.t t/package/table/table10.t t/package/table/table11.t t/package/table/table12.t t/package/vml/sub_write_anchor.t t/package/vml/sub_write_auto_fill.t t/package/vml/sub_write_column.t t/package/vml/sub_write_div.t t/package/vml/sub_write_fill.t t/package/vml/sub_write_idmap.t t/package/vml/sub_write_move_with_cells.t t/package/vml/sub_write_path.t t/package/vml/sub_write_row.t t/package/vml/sub_write_shadow.t t/package/vml/sub_write_shapelayout.t t/package/vml/sub_write_shapetype.t t/package/vml/sub_write_size_with_cells.t t/package/vml/sub_write_stroke.t t/package/vml/sub_write_textbox.t t/package/vml/vml_01.t t/package/vml/vml_02.t t/package/vml/vml_03.t t/package/xml_writer/sub_write_xml_declaration.t t/regression/array_formula01.t t/regression/array_formula02.t t/regression/array_formula03.t t/regression/array_formula04.t t/regression/autofilter00.t t/regression/autofilter01.t t/regression/autofilter02.t t/regression/autofilter03.t t/regression/autofilter04.t t/regression/autofilter05.t t/regression/autofilter06.t t/regression/autofilter07.t t/regression/autofilter08.t t/regression/autofilter09.t t/regression/autofilter10.t t/regression/autofilter11.t t/regression/autofit01.t t/regression/autofit02.t t/regression/autofit03.t t/regression/autofit04.t t/regression/autofit05.t t/regression/autofit06.t t/regression/autofit07.t t/regression/autofit08.t t/regression/autofit09.t t/regression/autofit10.t t/regression/autofit11.t t/regression/autofit12.t t/regression/autofit13.t t/regression/autofit14.t t/regression/background01.t t/regression/background02.t t/regression/background03.t t/regression/background04.t t/regression/background05.t t/regression/background06.t t/regression/background07.t t/regression/bootstrap62.t t/regression/bootstrap63.t t/regression/bootstrap64.t t/regression/button01.t t/regression/button02.t t/regression/button03.t t/regression/button04.t t/regression/button05.t t/regression/button06.t t/regression/button07.t t/regression/button08.t t/regression/button09.t t/regression/button10.t t/regression/button11.t t/regression/button12.t t/regression/button13.t t/regression/button14.t t/regression/button15.t t/regression/chart_area01.t t/regression/chart_area02.t t/regression/chart_area03.t t/regression/chart_area04.t t/regression/chart_area05.t t/regression/chart_area06.t t/regression/chart_axis01.t t/regression/chart_axis02.t t/regression/chart_axis03.t t/regression/chart_axis04.t t/regression/chart_axis05.t t/regression/chart_axis06.t t/regression/chart_axis07.t t/regression/chart_axis08.t t/regression/chart_axis09.t t/regression/chart_axis10.t t/regression/chart_axis11.t t/regression/chart_axis12.t t/regression/chart_axis13.t t/regression/chart_axis14.t t/regression/chart_axis15.t t/regression/chart_axis16.t t/regression/chart_axis17.t t/regression/chart_axis18.t t/regression/chart_axis19.t t/regression/chart_axis20.t t/regression/chart_axis21.t t/regression/chart_axis22.t t/regression/chart_axis23.t t/regression/chart_axis24.t t/regression/chart_axis25.t t/regression/chart_axis26.t t/regression/chart_axis27.t t/regression/chart_axis28.t t/regression/chart_axis29.t t/regression/chart_axis30.t t/regression/chart_axis31.t t/regression/chart_axis32.t t/regression/chart_axis33.t t/regression/chart_axis34.t t/regression/chart_axis35.t t/regression/chart_axis36.t t/regression/chart_axis37.t t/regression/chart_axis38.t t/regression/chart_axis39.t t/regression/chart_axis40.t t/regression/chart_axis41.t t/regression/chart_axis42.t t/regression/chart_axis43.t t/regression/chart_axis44.t t/regression/chart_axis45.t t/regression/chart_axis46.t t/regression/chart_axis47.t t/regression/chart_axis48.t t/regression/chart_axis49.t t/regression/chart_axis50.t t/regression/chart_axis51.t t/regression/chart_axis52.t t/regression/chart_axis53.t t/regression/chart_axis54.t t/regression/chart_bar01.t t/regression/chart_bar02.t t/regression/chart_bar03.t t/regression/chart_bar04.t t/regression/chart_bar05.t t/regression/chart_bar06.t t/regression/chart_bar07.t t/regression/chart_bar08.t t/regression/chart_bar09.t t/regression/chart_bar10.t t/regression/chart_bar11.t t/regression/chart_bar12.t t/regression/chart_bar13.t t/regression/chart_bar14.t t/regression/chart_bar15.t t/regression/chart_bar16.t t/regression/chart_bar17.t t/regression/chart_bar18.t t/regression/chart_bar19.t t/regression/chart_bar20.t t/regression/chart_bar21.t t/regression/chart_bar22.t t/regression/chart_bar23.t t/regression/chart_bar24.t t/regression/chart_blank01.t t/regression/chart_blank02.t t/regression/chart_blank03.t t/regression/chart_blank04.t t/regression/chart_blank05.t t/regression/chart_blank06.t t/regression/chart_blank07.t t/regression/chart_chartarea01.t t/regression/chart_chartarea02.t t/regression/chart_chartarea03.t t/regression/chart_chartarea04.t t/regression/chart_chartarea05.t t/regression/chart_chartarea06.t t/regression/chart_clustered01.t t/regression/chart_column01.t t/regression/chart_column02.t t/regression/chart_column03.t t/regression/chart_column04.t t/regression/chart_column05.t t/regression/chart_column06.t t/regression/chart_column07.t t/regression/chart_column08.t t/regression/chart_column09.t t/regression/chart_column10.t t/regression/chart_column11.t t/regression/chart_column12.t t/regression/chart_column13.t t/regression/chart_combined01.t t/regression/chart_combined02.t t/regression/chart_combined03.t t/regression/chart_combined04.t t/regression/chart_combined05.t t/regression/chart_combined06.t t/regression/chart_combined07.t t/regression/chart_combined08.t t/regression/chart_combined09.t t/regression/chart_combined10.t t/regression/chart_combined11.t t/regression/chart_crossing01.t t/regression/chart_crossing02.t t/regression/chart_crossing03.t t/regression/chart_crossing04.t t/regression/chart_crossing05.t t/regression/chart_crossing06.t t/regression/chart_crossing07.t t/regression/chart_data_labels01.t t/regression/chart_data_labels02.t t/regression/chart_data_labels03.t t/regression/chart_data_labels04.t t/regression/chart_data_labels05.t t/regression/chart_data_labels06.t t/regression/chart_data_labels07.t t/regression/chart_data_labels08.t t/regression/chart_data_labels09.t t/regression/chart_data_labels10.t t/regression/chart_data_labels11.t t/regression/chart_data_labels12.t t/regression/chart_data_labels13.t t/regression/chart_data_labels14.t t/regression/chart_data_labels15.t t/regression/chart_data_labels16.t t/regression/chart_data_labels17.t t/regression/chart_data_labels18.t t/regression/chart_data_labels19.t t/regression/chart_data_labels20.t t/regression/chart_data_labels21.t t/regression/chart_data_labels22.t t/regression/chart_data_labels23.t t/regression/chart_data_labels24.t t/regression/chart_data_labels25.t t/regression/chart_data_labels26.t t/regression/chart_data_labels27.t t/regression/chart_data_labels28.t t/regression/chart_data_labels29.t t/regression/chart_data_labels30.t t/regression/chart_data_labels31.t t/regression/chart_data_labels32.t t/regression/chart_data_labels33.t t/regression/chart_data_labels34.t t/regression/chart_data_labels35.t t/regression/chart_data_labels36.t t/regression/chart_data_labels37.t t/regression/chart_data_labels38.t t/regression/chart_data_labels39.t t/regression/chart_data_labels40.t t/regression/chart_data_labels41.t t/regression/chart_data_labels42.t t/regression/chart_data_labels43.t t/regression/chart_data_labels44.t t/regression/chart_data_labels45.t t/regression/chart_data_labels46.t t/regression/chart_data_labels47.t t/regression/chart_data_labels48.t t/regression/chart_data_labels49.t t/regression/chart_data_labels50.t t/regression/chart_data_labels51.t t/regression/chart_data_labels52.t t/regression/chart_data_labels53.t t/regression/chart_data_labels54.t t/regression/chart_date01.t t/regression/chart_date02.t t/regression/chart_date03.t t/regression/chart_date04.t t/regression/chart_date05.t t/regression/chart_display_units01.t t/regression/chart_display_units02.t t/regression/chart_display_units03.t t/regression/chart_display_units04.t t/regression/chart_display_units05.t t/regression/chart_display_units06.t t/regression/chart_display_units07.t t/regression/chart_display_units08.t t/regression/chart_display_units09.t t/regression/chart_display_units10.t t/regression/chart_display_units11.t t/regression/chart_display_units12.t t/regression/chart_doughnut01.t t/regression/chart_doughnut02.t t/regression/chart_doughnut03.t t/regression/chart_doughnut04.t t/regression/chart_doughnut05.t t/regression/chart_doughnut06.t t/regression/chart_doughnut07.t t/regression/chart_drop_lines01.t t/regression/chart_drop_lines02.t t/regression/chart_drop_lines03.t t/regression/chart_drop_lines04.t t/regression/chart_errorbars01.t t/regression/chart_errorbars02.t t/regression/chart_errorbars03.t t/regression/chart_errorbars04.t t/regression/chart_errorbars05.t t/regression/chart_errorbars06.t t/regression/chart_errorbars07.t t/regression/chart_errorbars08.t t/regression/chart_errorbars09.t t/regression/chart_errorbars10.t t/regression/chart_font01.t t/regression/chart_font02.t t/regression/chart_font03.t t/regression/chart_font04.t t/regression/chart_font05.t t/regression/chart_font06.t t/regression/chart_font07.t t/regression/chart_font08.t t/regression/chart_font09.t t/regression/chart_format01.t t/regression/chart_format02.t t/regression/chart_format03.t t/regression/chart_format04.t t/regression/chart_format05.t t/regression/chart_format06.t t/regression/chart_format07.t t/regression/chart_format08.t t/regression/chart_format09.t t/regression/chart_format10.t t/regression/chart_format11.t t/regression/chart_format12.t t/regression/chart_format13.t t/regression/chart_format14.t t/regression/chart_format15.t t/regression/chart_format16.t t/regression/chart_format17.t t/regression/chart_format18.t t/regression/chart_format19.t t/regression/chart_format20.t t/regression/chart_format21.t t/regression/chart_format22.t t/regression/chart_format23.t t/regression/chart_format24.t t/regression/chart_format25.t t/regression/chart_format26.t t/regression/chart_format27.t t/regression/chart_format28.t t/regression/chart_format29.t t/regression/chart_format30.t t/regression/chart_format31.t t/regression/chart_format32.t t/regression/chart_format33.t t/regression/chart_format34.t t/regression/chart_format35.t t/regression/chart_gap01.t t/regression/chart_gap02.t t/regression/chart_gap03.t t/regression/chart_gap04.t t/regression/chart_gap05.t t/regression/chart_gradient01.t t/regression/chart_gradient02.t t/regression/chart_gradient03.t t/regression/chart_gradient04.t t/regression/chart_gradient05.t t/regression/chart_gradient06.t t/regression/chart_gradient07.t t/regression/chart_gradient08.t t/regression/chart_gradient09.t t/regression/chart_gradient10.t t/regression/chart_gradient11.t t/regression/chart_gradient12.t t/regression/chart_gradient13.t t/regression/chart_gridlines01.t t/regression/chart_gridlines02.t t/regression/chart_gridlines03.t t/regression/chart_gridlines04.t t/regression/chart_gridlines05.t t/regression/chart_gridlines06.t t/regression/chart_gridlines07.t t/regression/chart_gridlines08.t t/regression/chart_gridlines09.t t/regression/chart_high_low_lines01.t t/regression/chart_high_low_lines02.t t/regression/chart_layout01.t t/regression/chart_layout02.t t/regression/chart_layout03.t t/regression/chart_layout04.t t/regression/chart_layout05.t t/regression/chart_layout06.t t/regression/chart_layout07.t t/regression/chart_layout08.t t/regression/chart_legend01.t t/regression/chart_legend02.t t/regression/chart_legend03.t t/regression/chart_legend04.t t/regression/chart_legend05.t t/regression/chart_legend06.t t/regression/chart_legend07.t t/regression/chart_line01.t t/regression/chart_line02.t t/regression/chart_line03.t t/regression/chart_line04.t t/regression/chart_line05.t t/regression/chart_line06.t t/regression/chart_line07.t t/regression/chart_line08.t t/regression/chart_name01.t t/regression/chart_name02.t t/regression/chart_name03.t t/regression/chart_order01.t t/regression/chart_order02.t t/regression/chart_order03.t t/regression/chart_pattern01.t t/regression/chart_pattern02.t t/regression/chart_pattern03.t t/regression/chart_pattern04.t t/regression/chart_pattern05.t t/regression/chart_pattern06.t t/regression/chart_pattern07.t t/regression/chart_pattern08.t t/regression/chart_pattern09.t t/regression/chart_pattern10.t t/regression/chart_pie01.t t/regression/chart_pie02.t t/regression/chart_pie03.t t/regression/chart_pie04.t t/regression/chart_pie05.t t/regression/chart_points01.t t/regression/chart_points02.t t/regression/chart_points03.t t/regression/chart_points04.t t/regression/chart_points05.t t/regression/chart_points06.t t/regression/chart_radar01.t t/regression/chart_radar02.t t/regression/chart_radar03.t t/regression/chart_scatter01.t t/regression/chart_scatter02.t t/regression/chart_scatter03.t t/regression/chart_scatter04.t t/regression/chart_scatter05.t t/regression/chart_scatter06.t t/regression/chart_scatter07.t t/regression/chart_scatter08.t t/regression/chart_scatter09.t t/regression/chart_scatter10.t t/regression/chart_scatter11.t t/regression/chart_scatter12.t t/regression/chart_scatter13.t t/regression/chart_scatter14.t t/regression/chart_scatter15.t t/regression/chart_size01.t t/regression/chart_size02.t t/regression/chart_size03.t t/regression/chart_size04.t t/regression/chart_size05.t t/regression/chart_sparse01.t t/regression/chart_stock01.t t/regression/chart_stock02.t t/regression/chart_stock03.t t/regression/chart_str01.t t/regression/chart_str02.t t/regression/chart_table01.t t/regression/chart_table02.t t/regression/chart_table03.t t/regression/chart_title01.t t/regression/chart_title02.t t/regression/chart_title03.t t/regression/chart_up_down_bars01.t t/regression/chart_up_down_bars02.t t/regression/chart_up_down_bars03.t t/regression/chartsheet01.t t/regression/chartsheet02.t t/regression/chartsheet03.t t/regression/chartsheet04.t t/regression/chartsheet05.t t/regression/chartsheet06.t t/regression/chartsheet07.t t/regression/chartsheet08.t t/regression/chartsheet09.t t/regression/chartsheet10.t t/regression/comment01.t t/regression/comment02.t t/regression/comment03.t t/regression/comment04.t t/regression/comment05.t t/regression/comment06.t t/regression/comment07.t t/regression/comment08.t t/regression/comment09.t t/regression/comment10.t t/regression/comment11.t t/regression/comment12.t t/regression/comment13.t t/regression/comment14.t t/regression/comment15.t t/regression/comment16.t t/regression/comment17.t t/regression/comment18.t t/regression/cond_format01.t t/regression/cond_format02.t t/regression/cond_format03.t t/regression/cond_format04.t t/regression/cond_format05.t t/regression/cond_format06.t t/regression/cond_format07.t t/regression/cond_format08.t t/regression/cond_format09.t t/regression/cond_format10.t t/regression/cond_format11.t t/regression/cond_format12.t t/regression/cond_format13.t t/regression/cond_format14.t t/regression/cond_format15.t t/regression/cond_format16.t t/regression/cond_format17.t t/regression/cond_format18.t t/regression/cond_format19.t t/regression/cond_format20.t t/regression/custom_colors01.t t/regression/data_validation01.t t/regression/data_validation02.t t/regression/data_validation03.t t/regression/data_validation04.t t/regression/data_validation05.t t/regression/data_validation06.t t/regression/data_validation08.t t/regression/date_1904_01.t t/regression/date_1904_02.t t/regression/date_examples01.t t/regression/default_format01.t t/regression/default_row01.t t/regression/default_row02.t t/regression/default_row03.t t/regression/default_row04.t t/regression/default_row05.t t/regression/default_row06.t t/regression/defined_name01.t t/regression/defined_name02.t t/regression/defined_name03.t t/regression/defined_name04.t t/regression/dynamic_array01.t t/regression/dynamic_array02.t t/regression/dynamic_array03.t t/regression/dynamic_array04.t t/regression/embed_image01.t t/regression/embed_image02.t t/regression/embed_image03.t t/regression/embed_image04.t t/regression/embed_image05.t t/regression/embed_image06.t t/regression/embed_image07.t t/regression/embed_image08.t t/regression/embed_image09.t t/regression/embed_image10.t t/regression/embed_image11.t t/regression/embed_image12.t t/regression/embed_image13.t t/regression/escapes01.t t/regression/escapes02.t t/regression/escapes03.t t/regression/escapes04.t t/regression/escapes05.t t/regression/escapes06.t t/regression/escapes07.t t/regression/escapes08.t t/regression/escapes09.t t/regression/excel2003_style01.t t/regression/excel2003_style02.t t/regression/excel2003_style03.t t/regression/excel2003_style04.t t/regression/excel2003_style05.t t/regression/excel2003_style06.t t/regression/excel2003_style07.t t/regression/excel2003_style08.t t/regression/filehandle01.t t/regression/firstsheet01.t t/regression/fit_to_page01.t t/regression/fit_to_page02.t t/regression/fit_to_page03.t t/regression/fit_to_page04.t t/regression/fit_to_page05.t t/regression/format01.t t/regression/format02.t t/regression/format03.t t/regression/format04.t t/regression/format05.t t/regression/format11.t t/regression/format12.t t/regression/format13.t t/regression/format14.t t/regression/format15.t t/regression/format16.t t/regression/format17.t t/regression/format18.t t/regression/format19.t t/regression/format20.t t/regression/format21.t t/regression/format22.t t/regression/format23.t t/regression/format24.t t/regression/format25.t t/regression/formula_results01.t t/regression/gridlines01.t t/regression/header_image01.t t/regression/header_image02.t t/regression/header_image03.t t/regression/header_image04.t t/regression/header_image05.t t/regression/header_image06.t t/regression/header_image07.t t/regression/header_image08.t t/regression/header_image09.t t/regression/header_image10.t t/regression/header_image11.t t/regression/header_image12.t t/regression/header_image13.t t/regression/header_image14.t t/regression/header_image15.t t/regression/header_image16.t t/regression/header_image17.t t/regression/header_image18.t t/regression/header_image19.t t/regression/header_image20.t t/regression/header_image21.t t/regression/header01.t t/regression/header02.t t/regression/header03.t t/regression/header04.t t/regression/hide01.t t/regression/hide02.t t/regression/hyperlink01.t t/regression/hyperlink02.t t/regression/hyperlink03.t t/regression/hyperlink04.t t/regression/hyperlink05.t t/regression/hyperlink06.t t/regression/hyperlink07.t t/regression/hyperlink08.t t/regression/hyperlink09.t t/regression/hyperlink10.t t/regression/hyperlink11.t t/regression/hyperlink12.t t/regression/hyperlink13.t t/regression/hyperlink14.t t/regression/hyperlink15.t t/regression/hyperlink16.t t/regression/hyperlink17.t t/regression/hyperlink18.t t/regression/hyperlink19.t t/regression/hyperlink20.t t/regression/hyperlink21.t t/regression/hyperlink22.t t/regression/hyperlink23.t t/regression/hyperlink24.t t/regression/hyperlink25.t t/regression/hyperlink26.t t/regression/hyperlink27.t t/regression/hyperlink28.t t/regression/hyperlink29.t t/regression/hyperlink30.t t/regression/hyperlink31.t t/regression/hyperlink32.t t/regression/hyperlink33.t t/regression/hyperlink34.t t/regression/hyperlink35.t t/regression/hyperlink36.t t/regression/hyperlink37.t t/regression/hyperlink38.t t/regression/hyperlink39.t t/regression/hyperlink40.t t/regression/hyperlink41.t t/regression/hyperlink42.t t/regression/hyperlink43.t t/regression/hyperlink44.t t/regression/hyperlink45.t t/regression/hyperlink46.t t/regression/hyperlink47.t t/regression/hyperlink48.t t/regression/hyperlink49.t t/regression/hyperlink50.t t/regression/hyperlink51.t t/regression/hyperlink52.t t/regression/ignore_error01.t t/regression/ignore_error02.t t/regression/ignore_error03.t t/regression/ignore_error04.t t/regression/ignore_error05.t t/regression/ignore_error06.t t/regression/image01.t t/regression/image02.t t/regression/image03.t t/regression/image04.t t/regression/image05.t t/regression/image06.t t/regression/image07.t t/regression/image08.t t/regression/image09.t t/regression/image10.t t/regression/image11.t t/regression/image12.t t/regression/image13.t t/regression/image14.t t/regression/image15.t t/regression/image16.t t/regression/image17.t t/regression/image18.t t/regression/image19.t t/regression/image22.t t/regression/image23.t t/regression/image24.t t/regression/image25.t t/regression/image26.t t/regression/image27.t t/regression/image28.t t/regression/image29.t t/regression/image30.t t/regression/image31.t t/regression/image32.t t/regression/image33.t t/regression/image34.t t/regression/image35.t t/regression/image36.t t/regression/image44.t t/regression/image45.t t/regression/image46.t t/regression/image47.t t/regression/image48.t t/regression/image49.t t/regression/image50.t t/regression/image51.t t/regression/image52.t t/regression/image53.t t/regression/image54.t t/regression/image55.t t/regression/image56.t t/regression/image57.t t/regression/image58.t t/regression/images/black_150.jpg t/regression/images/black_150.png t/regression/images/black_150e.png t/regression/images/black_300.jpg t/regression/images/black_300.png t/regression/images/black_300e.png t/regression/images/black_72.jpg t/regression/images/black_72.png t/regression/images/black_72e.png t/regression/images/black_96.jpg t/regression/images/black_96.png t/regression/images/blue.jpg t/regression/images/blue.png t/regression/images/grey.jpg t/regression/images/grey.png t/regression/images/happy.jpg t/regression/images/issue32.png t/regression/images/logo.gif t/regression/images/logo.jpg t/regression/images/logo.png t/regression/images/mylogo.png t/regression/images/red_208.png t/regression/images/red_64x20.png t/regression/images/red_readonly.png t/regression/images/red.bmp t/regression/images/red.gif t/regression/images/red.jpg t/regression/images/red.png t/regression/images/red2.png t/regression/images/train.jpg t/regression/images/watermark.png t/regression/images/yellow.jpg t/regression/images/yellow.png t/regression/images/zero_dpi.jpg t/regression/landscape01.t t/regression/macro01.t t/regression/macro02.t t/regression/macro03.t t/regression/merge_cells01.t t/regression/merge_range01.t t/regression/merge_range02.t t/regression/merge_range03.t t/regression/merge_range04.t t/regression/merge_range05.t t/regression/object_position01.t t/regression/object_position02.t t/regression/object_position03.t t/regression/object_position04.t t/regression/object_position06.t t/regression/object_position07.t t/regression/object_position08.t t/regression/object_position09.t t/regression/object_position10.t t/regression/object_position12.t t/regression/object_position13.t t/regression/object_position14.t t/regression/object_position15.t t/regression/object_position16.t t/regression/object_position17.t t/regression/object_position18.t t/regression/object_position19.t t/regression/object_position20.t t/regression/optimize01.t t/regression/optimize02.t t/regression/optimize03.t t/regression/optimize04.t t/regression/optimize05.t t/regression/optimize06.t t/regression/optimize07.t t/regression/optimize08.t t/regression/optimize13.t t/regression/optimize14.t t/regression/outline01.t t/regression/outline02.t t/regression/outline03.t t/regression/outline04.t t/regression/outline05.t t/regression/outline06.t t/regression/page_breaks01.t t/regression/page_breaks02.t t/regression/page_breaks03.t t/regression/page_breaks04.t t/regression/page_breaks05.t t/regression/page_breaks06.t t/regression/page_view01.t t/regression/page_view02.t t/regression/page_view03.t t/regression/panes01.t t/regression/print_across01.t t/regression/print_area01.t t/regression/print_area02.t t/regression/print_area03.t t/regression/print_area04.t t/regression/print_area05.t t/regression/print_area06.t t/regression/print_area07.t t/regression/print_area08.t t/regression/print_options01.t t/regression/print_options02.t t/regression/print_options03.t t/regression/print_options04.t t/regression/print_options05.t t/regression/print_options06.t t/regression/print_options07.t t/regression/print_scale01.t t/regression/print_scale02.t t/regression/properties01.t t/regression/properties02.t t/regression/properties03.t t/regression/properties04.t t/regression/properties05.t t/regression/properties06.t t/regression/protect01.t t/regression/protect02.t t/regression/protect03.t t/regression/protect04.t t/regression/protect05.t t/regression/protect06.t t/regression/protect07.t t/regression/protect08.t t/regression/quote_name01.t t/regression/quote_name02.t t/regression/quote_name03.t t/regression/quote_name04.t t/regression/quote_name05.t t/regression/quote_name06.t t/regression/quote_name07.t t/regression/quote_name08.t t/regression/quote_name09.t t/regression/quote_name10.t t/regression/quote_name11.t t/regression/repeat01.t t/regression/repeat02.t t/regression/repeat03.t t/regression/repeat04.t t/regression/repeat05.t t/regression/rich_string01.t t/regression/rich_string02.t t/regression/rich_string03.t t/regression/rich_string04.t t/regression/rich_string05.t t/regression/rich_string06.t t/regression/rich_string07.t t/regression/rich_string08.t t/regression/rich_string09.t t/regression/rich_string10.t t/regression/rich_string11.t t/regression/rich_string12.t t/regression/row_col_format01.t t/regression/row_col_format02.t t/regression/row_col_format03.t t/regression/row_col_format04.t t/regression/row_col_format05.t t/regression/row_col_format06.t t/regression/row_col_format07.t t/regression/row_col_format08.t t/regression/row_col_format09.t t/regression/row_col_format10.t t/regression/row_col_format11.t t/regression/row_col_format12.t t/regression/row_col_format13.t t/regression/row_col_format14.t t/regression/selection01.t t/regression/selection02.t t/regression/set_column01.t t/regression/set_column02.t t/regression/set_column03.t t/regression/set_column04.t t/regression/set_column05.t t/regression/set_column06.t t/regression/set_column07.t t/regression/set_column08.t t/regression/set_column09.t t/regression/set_column10.t t/regression/set_column11.t t/regression/set_print_scale01.t t/regression/set_row01.t t/regression/set_row02.t t/regression/set_row03.t t/regression/set_row04.t t/regression/set_start_page01.t t/regression/set_start_page02.t t/regression/set_start_page03.t t/regression/shape_connect01.t t/regression/shape_connect02.t t/regression/shape_connect03.t t/regression/shape_connect04.t t/regression/shape_scale01.t t/regression/shape_stencil01.t t/regression/shape01.t t/regression/shape02.t t/regression/shape03.t t/regression/shape04.t t/regression/shared_strings01.t t/regression/shared_strings02.t t/regression/simple01.t t/regression/simple02.t t/regression/simple03.t t/regression/simple04.t t/regression/simple05.t t/regression/tab_color01.t t/regression/table01.t t/regression/table02.t t/regression/table03.t t/regression/table04.t t/regression/table05.t t/regression/table06.t t/regression/table07.t t/regression/table08.t t/regression/table09.t t/regression/table10.t t/regression/table11.t t/regression/table12.t t/regression/table13.t t/regression/table14.t t/regression/table15.t t/regression/table16.t t/regression/table17.t t/regression/table18.t t/regression/table19.t t/regression/table20.t t/regression/table21.t t/regression/table22.t t/regression/table23.t t/regression/table24.t t/regression/table25.t t/regression/table26.t t/regression/table27.t t/regression/table28.t t/regression/table29.t t/regression/table30.t t/regression/table31.t t/regression/table32.t t/regression/table33.t t/regression/table34.t t/regression/table35.t t/regression/table36.t t/regression/taint01.t t/regression/taint02.t t/regression/top_left_cell01.t t/regression/top_left_cell02.t t/regression/top_left_cell03.t t/regression/tutorial01.t t/regression/tutorial02.t t/regression/tutorial03.t t/regression/types02.t t/regression/types08.t t/regression/utf8_01.t t/regression/utf8_02.t t/regression/utf8_03.t t/regression/utf8_04.t t/regression/utf8_05.t t/regression/utf8_06.t t/regression/utf8_07.t t/regression/utf8_08.t t/regression/utf8_09.t t/regression/utf8_10.t t/regression/utf8_11.t t/regression/vml01.t t/regression/vml02.t t/regression/vml03.t t/regression/vml04.t t/regression/xlsx_files/array_formula01.xlsx t/regression/xlsx_files/array_formula02.xlsx t/regression/xlsx_files/array_formula03.xlsx t/regression/xlsx_files/array_formula04.xlsx t/regression/xlsx_files/autofilter00.xlsx t/regression/xlsx_files/autofilter01.xlsx t/regression/xlsx_files/autofilter02.xlsx t/regression/xlsx_files/autofilter03.xlsx t/regression/xlsx_files/autofilter04.xlsx t/regression/xlsx_files/autofilter05.xlsx t/regression/xlsx_files/autofilter06.xlsx t/regression/xlsx_files/autofilter07.xlsx t/regression/xlsx_files/autofilter08.xlsx t/regression/xlsx_files/autofilter09.xlsx t/regression/xlsx_files/autofilter10.xlsx t/regression/xlsx_files/autofilter11.xlsx t/regression/xlsx_files/autofit01.xlsx t/regression/xlsx_files/autofit02.xlsx t/regression/xlsx_files/autofit03.xlsx t/regression/xlsx_files/autofit04.xlsx t/regression/xlsx_files/autofit05.xlsx t/regression/xlsx_files/autofit06.xlsx t/regression/xlsx_files/autofit07.xlsx t/regression/xlsx_files/autofit08.xlsx t/regression/xlsx_files/autofit09.xlsx t/regression/xlsx_files/autofit10.xlsx t/regression/xlsx_files/autofit11.xlsx t/regression/xlsx_files/autofit12.xlsx t/regression/xlsx_files/autofit13.xlsx t/regression/xlsx_files/autofit14.xlsx t/regression/xlsx_files/background01.xlsx t/regression/xlsx_files/background02.xlsx t/regression/xlsx_files/background03.xlsx t/regression/xlsx_files/background04.xlsx t/regression/xlsx_files/background05.xlsx t/regression/xlsx_files/background06.xlsx t/regression/xlsx_files/background07.xlsx t/regression/xlsx_files/bootstrap62.xlsx t/regression/xlsx_files/bootstrap63.xlsx t/regression/xlsx_files/bootstrap64.xlsx t/regression/xlsx_files/button01.xlsx t/regression/xlsx_files/button02.xlsx t/regression/xlsx_files/button03.xlsx t/regression/xlsx_files/button04.xlsx t/regression/xlsx_files/button05.xlsx t/regression/xlsx_files/button07.xlsm t/regression/xlsx_files/button08.xlsx t/regression/xlsx_files/button09.xlsx t/regression/xlsx_files/button10.xlsx t/regression/xlsx_files/button11.xlsx t/regression/xlsx_files/button12.xlsx t/regression/xlsx_files/button15.xlsx t/regression/xlsx_files/chart_area01.xlsx t/regression/xlsx_files/chart_area02.xlsx t/regression/xlsx_files/chart_area03.xlsx t/regression/xlsx_files/chart_area04.xlsx t/regression/xlsx_files/chart_area05.xlsx t/regression/xlsx_files/chart_area06.xlsx t/regression/xlsx_files/chart_axis01.xlsx t/regression/xlsx_files/chart_axis02.xlsx t/regression/xlsx_files/chart_axis03.xlsx t/regression/xlsx_files/chart_axis04.xlsx t/regression/xlsx_files/chart_axis05.xlsx t/regression/xlsx_files/chart_axis06.xlsx t/regression/xlsx_files/chart_axis07.xlsx t/regression/xlsx_files/chart_axis08.xlsx t/regression/xlsx_files/chart_axis09.xlsx t/regression/xlsx_files/chart_axis10.xlsx t/regression/xlsx_files/chart_axis11.xlsx t/regression/xlsx_files/chart_axis12.xlsx t/regression/xlsx_files/chart_axis13.xlsx t/regression/xlsx_files/chart_axis14.xlsx t/regression/xlsx_files/chart_axis15.xlsx t/regression/xlsx_files/chart_axis16.xlsx t/regression/xlsx_files/chart_axis17.xlsx t/regression/xlsx_files/chart_axis18.xlsx t/regression/xlsx_files/chart_axis19.xlsx t/regression/xlsx_files/chart_axis20.xlsx t/regression/xlsx_files/chart_axis21.xlsx t/regression/xlsx_files/chart_axis22.xlsx t/regression/xlsx_files/chart_axis23.xlsx t/regression/xlsx_files/chart_axis24.xlsx t/regression/xlsx_files/chart_axis25.xlsx t/regression/xlsx_files/chart_axis26.xlsx t/regression/xlsx_files/chart_axis27.xlsx t/regression/xlsx_files/chart_axis28.xlsx t/regression/xlsx_files/chart_axis29.xlsx t/regression/xlsx_files/chart_axis30.xlsx t/regression/xlsx_files/chart_axis31.xlsx t/regression/xlsx_files/chart_axis32.xlsx t/regression/xlsx_files/chart_axis33.xlsx t/regression/xlsx_files/chart_axis34.xlsx t/regression/xlsx_files/chart_axis35.xlsx t/regression/xlsx_files/chart_axis36.xlsx t/regression/xlsx_files/chart_axis37.xlsx t/regression/xlsx_files/chart_axis38.xlsx t/regression/xlsx_files/chart_axis39.xlsx t/regression/xlsx_files/chart_axis40.xlsx t/regression/xlsx_files/chart_axis41.xlsx t/regression/xlsx_files/chart_axis42.xlsx t/regression/xlsx_files/chart_axis43.xlsx t/regression/xlsx_files/chart_axis44.xlsx t/regression/xlsx_files/chart_axis45.xlsx t/regression/xlsx_files/chart_axis46.xlsx t/regression/xlsx_files/chart_axis47.xlsx t/regression/xlsx_files/chart_axis48.xlsx t/regression/xlsx_files/chart_axis49.xlsx t/regression/xlsx_files/chart_axis50.xlsx t/regression/xlsx_files/chart_axis51.xlsx t/regression/xlsx_files/chart_axis52.xlsx t/regression/xlsx_files/chart_axis53.xlsx t/regression/xlsx_files/chart_axis54.xlsx t/regression/xlsx_files/chart_bar01.xlsx t/regression/xlsx_files/chart_bar02.xlsx t/regression/xlsx_files/chart_bar03.xlsx t/regression/xlsx_files/chart_bar04.xlsx t/regression/xlsx_files/chart_bar05.xlsx t/regression/xlsx_files/chart_bar06.xlsx t/regression/xlsx_files/chart_bar07.xlsx t/regression/xlsx_files/chart_bar08.xlsx t/regression/xlsx_files/chart_bar09.xlsx t/regression/xlsx_files/chart_bar10.xlsx t/regression/xlsx_files/chart_bar11.xlsx t/regression/xlsx_files/chart_bar12.xlsx t/regression/xlsx_files/chart_bar13.xlsx t/regression/xlsx_files/chart_bar14.xlsx t/regression/xlsx_files/chart_bar15.xlsx t/regression/xlsx_files/chart_bar16.xlsx t/regression/xlsx_files/chart_bar17.xlsx t/regression/xlsx_files/chart_bar18.xlsx t/regression/xlsx_files/chart_bar19.xlsx t/regression/xlsx_files/chart_bar20.xlsx t/regression/xlsx_files/chart_bar21.xlsx t/regression/xlsx_files/chart_bar22.xlsx t/regression/xlsx_files/chart_bar23.xlsx t/regression/xlsx_files/chart_bar24.xlsx t/regression/xlsx_files/chart_blank01.xlsx t/regression/xlsx_files/chart_blank02.xlsx t/regression/xlsx_files/chart_blank03.xlsx t/regression/xlsx_files/chart_blank04.xlsx t/regression/xlsx_files/chart_blank05.xlsx t/regression/xlsx_files/chart_blank06.xlsx t/regression/xlsx_files/chart_blank07.xlsx t/regression/xlsx_files/chart_chartarea01.xlsx t/regression/xlsx_files/chart_chartarea03.xlsx t/regression/xlsx_files/chart_chartarea04.xlsx t/regression/xlsx_files/chart_chartarea05.xlsx t/regression/xlsx_files/chart_chartarea06.xlsx t/regression/xlsx_files/chart_clustered01.xlsx t/regression/xlsx_files/chart_column01.xlsx t/regression/xlsx_files/chart_column02.xlsx t/regression/xlsx_files/chart_column03.xlsx t/regression/xlsx_files/chart_column04.xlsx t/regression/xlsx_files/chart_column05.xlsx t/regression/xlsx_files/chart_column06.xlsx t/regression/xlsx_files/chart_column07.xlsx t/regression/xlsx_files/chart_column08.xlsx t/regression/xlsx_files/chart_column09.xlsx t/regression/xlsx_files/chart_column10.xlsx t/regression/xlsx_files/chart_column11.xlsx t/regression/xlsx_files/chart_column12.xlsx t/regression/xlsx_files/chart_column13.xlsx t/regression/xlsx_files/chart_combined01.xlsx t/regression/xlsx_files/chart_combined02.xlsx t/regression/xlsx_files/chart_combined03.xlsx t/regression/xlsx_files/chart_combined04.xlsx t/regression/xlsx_files/chart_combined05.xlsx t/regression/xlsx_files/chart_combined06.xlsx t/regression/xlsx_files/chart_combined07.xlsx t/regression/xlsx_files/chart_combined08.xlsx t/regression/xlsx_files/chart_combined09.xlsx t/regression/xlsx_files/chart_combined10.xlsx t/regression/xlsx_files/chart_combined11.xlsx t/regression/xlsx_files/chart_crossing01.xlsx t/regression/xlsx_files/chart_crossing02.xlsx t/regression/xlsx_files/chart_crossing03.xlsx t/regression/xlsx_files/chart_crossing04.xlsx t/regression/xlsx_files/chart_crossing05.xlsx t/regression/xlsx_files/chart_crossing06.xlsx t/regression/xlsx_files/chart_crossing07.xlsx t/regression/xlsx_files/chart_data_labels01.xlsx t/regression/xlsx_files/chart_data_labels02.xlsx t/regression/xlsx_files/chart_data_labels03.xlsx t/regression/xlsx_files/chart_data_labels04.xlsx t/regression/xlsx_files/chart_data_labels05.xlsx t/regression/xlsx_files/chart_data_labels06.xlsx t/regression/xlsx_files/chart_data_labels07.xlsx t/regression/xlsx_files/chart_data_labels08.xlsx t/regression/xlsx_files/chart_data_labels09.xlsx t/regression/xlsx_files/chart_data_labels10.xlsx t/regression/xlsx_files/chart_data_labels11.xlsx t/regression/xlsx_files/chart_data_labels12.xlsx t/regression/xlsx_files/chart_data_labels13.xlsx t/regression/xlsx_files/chart_data_labels14.xlsx t/regression/xlsx_files/chart_data_labels15.xlsx t/regression/xlsx_files/chart_data_labels16.xlsx t/regression/xlsx_files/chart_data_labels17.xlsx t/regression/xlsx_files/chart_data_labels18.xlsx t/regression/xlsx_files/chart_data_labels19.xlsx t/regression/xlsx_files/chart_data_labels20.xlsx t/regression/xlsx_files/chart_data_labels21.xlsx t/regression/xlsx_files/chart_data_labels22.xlsx t/regression/xlsx_files/chart_data_labels23.xlsx t/regression/xlsx_files/chart_data_labels24.xlsx t/regression/xlsx_files/chart_data_labels25.xlsx t/regression/xlsx_files/chart_data_labels26.xlsx t/regression/xlsx_files/chart_data_labels27.xlsx t/regression/xlsx_files/chart_data_labels28.xlsx t/regression/xlsx_files/chart_data_labels29.xlsx t/regression/xlsx_files/chart_data_labels30.xlsx t/regression/xlsx_files/chart_data_labels31.xlsx t/regression/xlsx_files/chart_data_labels32.xlsx t/regression/xlsx_files/chart_data_labels33.xlsx t/regression/xlsx_files/chart_data_labels34.xlsx t/regression/xlsx_files/chart_data_labels35.xlsx t/regression/xlsx_files/chart_data_labels36.xlsx t/regression/xlsx_files/chart_data_labels37.xlsx t/regression/xlsx_files/chart_data_labels38.xlsx t/regression/xlsx_files/chart_data_labels39.xlsx t/regression/xlsx_files/chart_data_labels40.xlsx t/regression/xlsx_files/chart_data_labels41.xlsx t/regression/xlsx_files/chart_data_labels42.xlsx t/regression/xlsx_files/chart_data_labels43.xlsx t/regression/xlsx_files/chart_data_labels44.xlsx t/regression/xlsx_files/chart_data_labels45.xlsx t/regression/xlsx_files/chart_data_labels46.xlsx t/regression/xlsx_files/chart_data_labels47.xlsx t/regression/xlsx_files/chart_data_labels48.xlsx t/regression/xlsx_files/chart_data_labels49.xlsx t/regression/xlsx_files/chart_data_labels50.xlsx t/regression/xlsx_files/chart_data_labels51.xlsx t/regression/xlsx_files/chart_data_labels52.xlsx t/regression/xlsx_files/chart_data_labels53.xlsx t/regression/xlsx_files/chart_data_labels54.xlsx t/regression/xlsx_files/chart_date01.xlsx t/regression/xlsx_files/chart_date02.xlsx t/regression/xlsx_files/chart_date03.xlsx t/regression/xlsx_files/chart_date04.xlsx t/regression/xlsx_files/chart_date05.xlsx t/regression/xlsx_files/chart_display_units01.xlsx t/regression/xlsx_files/chart_display_units02.xlsx t/regression/xlsx_files/chart_display_units03.xlsx t/regression/xlsx_files/chart_display_units04.xlsx t/regression/xlsx_files/chart_display_units05.xlsx t/regression/xlsx_files/chart_display_units06.xlsx t/regression/xlsx_files/chart_display_units07.xlsx t/regression/xlsx_files/chart_display_units08.xlsx t/regression/xlsx_files/chart_display_units09.xlsx t/regression/xlsx_files/chart_display_units10.xlsx t/regression/xlsx_files/chart_display_units11.xlsx t/regression/xlsx_files/chart_display_units12.xlsx t/regression/xlsx_files/chart_doughnut01.xlsx t/regression/xlsx_files/chart_doughnut02.xlsx t/regression/xlsx_files/chart_doughnut03.xlsx t/regression/xlsx_files/chart_doughnut04.xlsx t/regression/xlsx_files/chart_doughnut05.xlsx t/regression/xlsx_files/chart_doughnut06.xlsx t/regression/xlsx_files/chart_doughnut07.xlsx t/regression/xlsx_files/chart_drop_lines01.xlsx t/regression/xlsx_files/chart_drop_lines02.xlsx t/regression/xlsx_files/chart_drop_lines03.xlsx t/regression/xlsx_files/chart_drop_lines04.xlsx t/regression/xlsx_files/chart_errorbars01.xlsx t/regression/xlsx_files/chart_errorbars02.xlsx t/regression/xlsx_files/chart_errorbars03.xlsx t/regression/xlsx_files/chart_errorbars04.xlsx t/regression/xlsx_files/chart_errorbars05.xlsx t/regression/xlsx_files/chart_errorbars06.xlsx t/regression/xlsx_files/chart_errorbars07.xlsx t/regression/xlsx_files/chart_errorbars08.xlsx t/regression/xlsx_files/chart_errorbars09.xlsx t/regression/xlsx_files/chart_errorbars10.xlsx t/regression/xlsx_files/chart_font01.xlsx t/regression/xlsx_files/chart_font02.xlsx t/regression/xlsx_files/chart_font03.xlsx t/regression/xlsx_files/chart_font04.xlsx t/regression/xlsx_files/chart_font05.xlsx t/regression/xlsx_files/chart_font06.xlsx t/regression/xlsx_files/chart_font07.xlsx t/regression/xlsx_files/chart_font08.xlsx t/regression/xlsx_files/chart_font09.xlsx t/regression/xlsx_files/chart_format01.xlsx t/regression/xlsx_files/chart_format02.xlsx t/regression/xlsx_files/chart_format03.xlsx t/regression/xlsx_files/chart_format04.xlsx t/regression/xlsx_files/chart_format05.xlsx t/regression/xlsx_files/chart_format06.xlsx t/regression/xlsx_files/chart_format07.xlsx t/regression/xlsx_files/chart_format08.xlsx t/regression/xlsx_files/chart_format09.xlsx t/regression/xlsx_files/chart_format10.xlsx t/regression/xlsx_files/chart_format11.xlsx t/regression/xlsx_files/chart_format12.xlsx t/regression/xlsx_files/chart_format13.xlsx t/regression/xlsx_files/chart_format14.xlsx t/regression/xlsx_files/chart_format15.xlsx t/regression/xlsx_files/chart_format16.xlsx t/regression/xlsx_files/chart_format17.xlsx t/regression/xlsx_files/chart_format18.xlsx t/regression/xlsx_files/chart_format19.xlsx t/regression/xlsx_files/chart_format20.xlsx t/regression/xlsx_files/chart_format21.xlsx t/regression/xlsx_files/chart_format22.xlsx t/regression/xlsx_files/chart_format23.xlsx t/regression/xlsx_files/chart_format24.xlsx t/regression/xlsx_files/chart_format25.xlsx t/regression/xlsx_files/chart_format26.xlsx t/regression/xlsx_files/chart_format27.xlsx t/regression/xlsx_files/chart_format28.xlsx t/regression/xlsx_files/chart_format29.xlsx t/regression/xlsx_files/chart_format30.xlsx t/regression/xlsx_files/chart_format31.xlsx t/regression/xlsx_files/chart_format32.xlsx t/regression/xlsx_files/chart_format33.xlsx t/regression/xlsx_files/chart_format34.xlsx t/regression/xlsx_files/chart_format35.xlsx t/regression/xlsx_files/chart_gap01.xlsx t/regression/xlsx_files/chart_gap02.xlsx t/regression/xlsx_files/chart_gap03.xlsx t/regression/xlsx_files/chart_gap04.xlsx t/regression/xlsx_files/chart_gap05.xlsx t/regression/xlsx_files/chart_gradient01.xlsx t/regression/xlsx_files/chart_gradient02.xlsx t/regression/xlsx_files/chart_gradient03.xlsx t/regression/xlsx_files/chart_gradient04.xlsx t/regression/xlsx_files/chart_gradient05.xlsx t/regression/xlsx_files/chart_gradient06.xlsx t/regression/xlsx_files/chart_gradient07.xlsx t/regression/xlsx_files/chart_gradient08.xlsx t/regression/xlsx_files/chart_gradient09.xlsx t/regression/xlsx_files/chart_gradient10.xlsx t/regression/xlsx_files/chart_gradient11.xlsx t/regression/xlsx_files/chart_gradient12.xlsx t/regression/xlsx_files/chart_gradient13.xlsx t/regression/xlsx_files/chart_gridlines01.xlsx t/regression/xlsx_files/chart_gridlines02.xlsx t/regression/xlsx_files/chart_gridlines03.xlsx t/regression/xlsx_files/chart_gridlines04.xlsx t/regression/xlsx_files/chart_gridlines05.xlsx t/regression/xlsx_files/chart_gridlines06.xlsx t/regression/xlsx_files/chart_gridlines07.xlsx t/regression/xlsx_files/chart_gridlines08.xlsx t/regression/xlsx_files/chart_gridlines09.xlsx t/regression/xlsx_files/chart_high_low_lines01.xlsx t/regression/xlsx_files/chart_high_low_lines02.xlsx t/regression/xlsx_files/chart_layout01.xlsx t/regression/xlsx_files/chart_layout02.xlsx t/regression/xlsx_files/chart_layout03.xlsx t/regression/xlsx_files/chart_layout04.xlsx t/regression/xlsx_files/chart_layout05.xlsx t/regression/xlsx_files/chart_layout06.xlsx t/regression/xlsx_files/chart_layout07.xlsx t/regression/xlsx_files/chart_layout08.xlsx t/regression/xlsx_files/chart_legend01.xlsx t/regression/xlsx_files/chart_legend03.xlsx t/regression/xlsx_files/chart_legend04.xlsx t/regression/xlsx_files/chart_legend05.xlsx t/regression/xlsx_files/chart_legend06.xlsx t/regression/xlsx_files/chart_legend07.xlsx t/regression/xlsx_files/chart_line01.xlsx t/regression/xlsx_files/chart_line02.xlsx t/regression/xlsx_files/chart_line03.xlsx t/regression/xlsx_files/chart_line04.xlsx t/regression/xlsx_files/chart_line05.xlsx t/regression/xlsx_files/chart_line06.xlsx t/regression/xlsx_files/chart_line07.xlsx t/regression/xlsx_files/chart_line08.xlsx t/regression/xlsx_files/chart_name01.xlsx t/regression/xlsx_files/chart_name02.xlsx t/regression/xlsx_files/chart_name03.xlsx t/regression/xlsx_files/chart_order01.xlsx t/regression/xlsx_files/chart_order03.xlsx t/regression/xlsx_files/chart_pattern01.xlsx t/regression/xlsx_files/chart_pattern02.xlsx t/regression/xlsx_files/chart_pattern03.xlsx t/regression/xlsx_files/chart_pattern04.xlsx t/regression/xlsx_files/chart_pattern05.xlsx t/regression/xlsx_files/chart_pattern06.xlsx t/regression/xlsx_files/chart_pattern07.xlsx t/regression/xlsx_files/chart_pattern08.xlsx t/regression/xlsx_files/chart_pattern09.xlsx t/regression/xlsx_files/chart_pattern10.xlsx t/regression/xlsx_files/chart_pie01.xlsx t/regression/xlsx_files/chart_pie02.xlsx t/regression/xlsx_files/chart_pie03.xlsx t/regression/xlsx_files/chart_pie04.xlsx t/regression/xlsx_files/chart_pie05.xlsx t/regression/xlsx_files/chart_points01.xlsx t/regression/xlsx_files/chart_points02.xlsx t/regression/xlsx_files/chart_points03.xlsx t/regression/xlsx_files/chart_points04.xlsx t/regression/xlsx_files/chart_points05.xlsx t/regression/xlsx_files/chart_points06.xlsx t/regression/xlsx_files/chart_radar01.xlsx t/regression/xlsx_files/chart_radar02.xlsx t/regression/xlsx_files/chart_radar03.xlsx t/regression/xlsx_files/chart_scatter01.xlsx t/regression/xlsx_files/chart_scatter02.xlsx t/regression/xlsx_files/chart_scatter03.xlsx t/regression/xlsx_files/chart_scatter04.xlsx t/regression/xlsx_files/chart_scatter05.xlsx t/regression/xlsx_files/chart_scatter06.xlsx t/regression/xlsx_files/chart_scatter07.xlsx t/regression/xlsx_files/chart_scatter08.xlsx t/regression/xlsx_files/chart_scatter09.xlsx t/regression/xlsx_files/chart_scatter10.xlsx t/regression/xlsx_files/chart_scatter11.xlsx t/regression/xlsx_files/chart_scatter12.xlsx t/regression/xlsx_files/chart_scatter14.xlsx t/regression/xlsx_files/chart_scatter15.xlsx t/regression/xlsx_files/chart_size01.xlsx t/regression/xlsx_files/chart_size04.xlsx t/regression/xlsx_files/chart_sparse01.xlsx t/regression/xlsx_files/chart_stock01.xlsx t/regression/xlsx_files/chart_stock02.xlsx t/regression/xlsx_files/chart_stock03.xlsx t/regression/xlsx_files/chart_str01.xlsx t/regression/xlsx_files/chart_str02.xlsx t/regression/xlsx_files/chart_table01.xlsx t/regression/xlsx_files/chart_table02.xlsx t/regression/xlsx_files/chart_table03.xlsx t/regression/xlsx_files/chart_title01.xlsx t/regression/xlsx_files/chart_title02.xlsx t/regression/xlsx_files/chart_title03.xlsx t/regression/xlsx_files/chart_up_down_bars01.xlsx t/regression/xlsx_files/chart_up_down_bars02.xlsx t/regression/xlsx_files/chart_up_down_bars03.xlsx t/regression/xlsx_files/chartsheet01.xlsx t/regression/xlsx_files/chartsheet02.xlsx t/regression/xlsx_files/chartsheet03.xlsx t/regression/xlsx_files/chartsheet04.xlsx t/regression/xlsx_files/chartsheet05.xlsx t/regression/xlsx_files/chartsheet06.xlsx t/regression/xlsx_files/chartsheet07.xlsx t/regression/xlsx_files/chartsheet08.xlsx t/regression/xlsx_files/chartsheet09.xlsx t/regression/xlsx_files/chartsheet10.xlsx t/regression/xlsx_files/comment01.xlsx t/regression/xlsx_files/comment02.xlsx t/regression/xlsx_files/comment03.xlsx t/regression/xlsx_files/comment04.xlsx t/regression/xlsx_files/comment05.xlsx t/regression/xlsx_files/comment06.xlsx t/regression/xlsx_files/comment07.xlsx t/regression/xlsx_files/comment08.xlsx t/regression/xlsx_files/comment09.xlsx t/regression/xlsx_files/comment10.xlsx t/regression/xlsx_files/comment11.xlsx t/regression/xlsx_files/comment12.xlsx t/regression/xlsx_files/comment13.xlsx t/regression/xlsx_files/comment14.xlsx t/regression/xlsx_files/comment15.xlsx t/regression/xlsx_files/comment16.xlsx t/regression/xlsx_files/comment17.xlsx t/regression/xlsx_files/comment18.xlsx t/regression/xlsx_files/cond_format01.xlsx t/regression/xlsx_files/cond_format02.xlsx t/regression/xlsx_files/cond_format03.xlsx t/regression/xlsx_files/cond_format04.xlsx t/regression/xlsx_files/cond_format05.xlsx t/regression/xlsx_files/cond_format06.xlsx t/regression/xlsx_files/cond_format07.xlsx t/regression/xlsx_files/cond_format08.xlsx t/regression/xlsx_files/cond_format10.xlsx t/regression/xlsx_files/cond_format11.xlsx t/regression/xlsx_files/cond_format12.xlsx t/regression/xlsx_files/cond_format13.xlsx t/regression/xlsx_files/cond_format14.xlsx t/regression/xlsx_files/cond_format15.xlsx t/regression/xlsx_files/cond_format16.xlsx t/regression/xlsx_files/cond_format17.xlsx t/regression/xlsx_files/cond_format18.xlsx t/regression/xlsx_files/cond_format19.xlsx t/regression/xlsx_files/cond_format20.xlsx t/regression/xlsx_files/custom_colors01.xlsx t/regression/xlsx_files/data_validation01.xlsx t/regression/xlsx_files/data_validation02.xlsx t/regression/xlsx_files/data_validation03.xlsx t/regression/xlsx_files/data_validation08.xlsx t/regression/xlsx_files/date_1904_01.xlsx t/regression/xlsx_files/date_1904_02.xlsx t/regression/xlsx_files/date_examples01.xlsx t/regression/xlsx_files/default_format01.xlsx t/regression/xlsx_files/default_row01.xlsx t/regression/xlsx_files/default_row02.xlsx t/regression/xlsx_files/default_row03.xlsx t/regression/xlsx_files/default_row04.xlsx t/regression/xlsx_files/default_row05.xlsx t/regression/xlsx_files/default_row06.xlsx t/regression/xlsx_files/defined_name01.xlsx t/regression/xlsx_files/defined_name02.xlsx t/regression/xlsx_files/defined_name03.xlsx t/regression/xlsx_files/defined_name04.xlsx t/regression/xlsx_files/dynamic_array01.xlsx t/regression/xlsx_files/dynamic_array02.xlsx t/regression/xlsx_files/dynamic_array03.xlsx t/regression/xlsx_files/dynamic_array04.xlsx t/regression/xlsx_files/embed_image01.xlsx t/regression/xlsx_files/embed_image02.xlsx t/regression/xlsx_files/embed_image03.xlsx t/regression/xlsx_files/embed_image04.xlsx t/regression/xlsx_files/embed_image05.xlsx t/regression/xlsx_files/embed_image06.xlsx t/regression/xlsx_files/embed_image07.xlsx t/regression/xlsx_files/embed_image08.xlsx t/regression/xlsx_files/embed_image09.xlsx t/regression/xlsx_files/embed_image10.xlsx t/regression/xlsx_files/embed_image11.xlsx t/regression/xlsx_files/embed_image12.xlsx t/regression/xlsx_files/embed_image13.xlsx t/regression/xlsx_files/escapes01.xlsx t/regression/xlsx_files/escapes02.xlsx t/regression/xlsx_files/escapes03.xlsx t/regression/xlsx_files/escapes04.xlsx t/regression/xlsx_files/escapes05.xlsx t/regression/xlsx_files/escapes06.xlsx t/regression/xlsx_files/escapes07.xlsx t/regression/xlsx_files/escapes08.xlsx t/regression/xlsx_files/escapes09.xlsx t/regression/xlsx_files/excel2003_style01.xlsx t/regression/xlsx_files/excel2003_style02.xlsx t/regression/xlsx_files/excel2003_style03.xlsx t/regression/xlsx_files/excel2003_style04.xlsx t/regression/xlsx_files/excel2003_style05.xlsx t/regression/xlsx_files/excel2003_style06.xlsx t/regression/xlsx_files/excel2003_style07.xlsx t/regression/xlsx_files/excel2003_style08.xlsx t/regression/xlsx_files/filehandle01.xlsx t/regression/xlsx_files/firstsheet01.xlsx t/regression/xlsx_files/fit_to_pages01.xlsx t/regression/xlsx_files/fit_to_pages02.xlsx t/regression/xlsx_files/fit_to_pages03.xlsx t/regression/xlsx_files/fit_to_pages04.xlsx t/regression/xlsx_files/fit_to_pages05.xlsx t/regression/xlsx_files/format01.xlsx t/regression/xlsx_files/format02.xlsx t/regression/xlsx_files/format03.xlsx t/regression/xlsx_files/format04.xlsx t/regression/xlsx_files/format05.xlsx t/regression/xlsx_files/format11.xlsx t/regression/xlsx_files/format12.xlsx t/regression/xlsx_files/format13.xlsx t/regression/xlsx_files/format14.xlsx t/regression/xlsx_files/format15.xlsx t/regression/xlsx_files/format16.xlsx t/regression/xlsx_files/format17.xlsx t/regression/xlsx_files/format18.xlsx t/regression/xlsx_files/format19.xlsx t/regression/xlsx_files/format20.xlsx t/regression/xlsx_files/format21.xlsx t/regression/xlsx_files/format22.xlsx t/regression/xlsx_files/format23.xlsx t/regression/xlsx_files/format24.xlsx t/regression/xlsx_files/format25.xlsx t/regression/xlsx_files/formula_results01.xlsx t/regression/xlsx_files/gridlines01.xlsx t/regression/xlsx_files/header_image01.xlsx t/regression/xlsx_files/header_image02.xlsx t/regression/xlsx_files/header_image03.xlsx t/regression/xlsx_files/header_image04.xlsx t/regression/xlsx_files/header_image05.xlsx t/regression/xlsx_files/header_image06.xlsx t/regression/xlsx_files/header_image07.xlsx t/regression/xlsx_files/header_image08.xlsx t/regression/xlsx_files/header_image09.xlsx t/regression/xlsx_files/header_image10.xlsx t/regression/xlsx_files/header_image11.xlsx t/regression/xlsx_files/header_image12.xlsx t/regression/xlsx_files/header_image13.xlsx t/regression/xlsx_files/header_image14.xlsx t/regression/xlsx_files/header_image15.xlsx t/regression/xlsx_files/header_image16.xlsx t/regression/xlsx_files/header_image17.xlsx t/regression/xlsx_files/header_image18.xlsx t/regression/xlsx_files/header_image19.xlsx t/regression/xlsx_files/header_image20.xlsx t/regression/xlsx_files/header_image21.xlsx t/regression/xlsx_files/header01.xlsx t/regression/xlsx_files/header02.xlsx t/regression/xlsx_files/header03.xlsx t/regression/xlsx_files/header04.xlsx t/regression/xlsx_files/hide01.xlsx t/regression/xlsx_files/hide02.xlsx t/regression/xlsx_files/hyperlink01.xlsx t/regression/xlsx_files/hyperlink02.xlsx t/regression/xlsx_files/hyperlink03.xlsx t/regression/xlsx_files/hyperlink04.xlsx t/regression/xlsx_files/hyperlink05.xlsx t/regression/xlsx_files/hyperlink06.xlsx t/regression/xlsx_files/hyperlink07.xlsx t/regression/xlsx_files/hyperlink08.xlsx t/regression/xlsx_files/hyperlink09.xlsx t/regression/xlsx_files/hyperlink10.xlsx t/regression/xlsx_files/hyperlink11.xlsx t/regression/xlsx_files/hyperlink12.xlsx t/regression/xlsx_files/hyperlink13.xlsx t/regression/xlsx_files/hyperlink14.xlsx t/regression/xlsx_files/hyperlink15.xlsx t/regression/xlsx_files/hyperlink16.xlsx t/regression/xlsx_files/hyperlink17.xlsx t/regression/xlsx_files/hyperlink18.xlsx t/regression/xlsx_files/hyperlink19.xlsx t/regression/xlsx_files/hyperlink20.xlsx t/regression/xlsx_files/hyperlink21.xlsx t/regression/xlsx_files/hyperlink22.xlsx t/regression/xlsx_files/hyperlink23.xlsx t/regression/xlsx_files/hyperlink24.xlsx t/regression/xlsx_files/hyperlink25.xlsx t/regression/xlsx_files/hyperlink26.xlsx t/regression/xlsx_files/hyperlink27.xlsx t/regression/xlsx_files/hyperlink28.xlsx t/regression/xlsx_files/hyperlink29.xlsx t/regression/xlsx_files/hyperlink30.xlsx t/regression/xlsx_files/hyperlink31.xlsx t/regression/xlsx_files/hyperlink32.xlsx t/regression/xlsx_files/hyperlink33.xlsx t/regression/xlsx_files/hyperlink34.xlsx t/regression/xlsx_files/hyperlink35.xlsx t/regression/xlsx_files/hyperlink36.xlsx t/regression/xlsx_files/hyperlink37.xlsx t/regression/xlsx_files/hyperlink38.xlsx t/regression/xlsx_files/hyperlink39.xlsx t/regression/xlsx_files/hyperlink40.xlsx t/regression/xlsx_files/hyperlink41.xlsx t/regression/xlsx_files/hyperlink42.xlsx t/regression/xlsx_files/hyperlink43.xlsx t/regression/xlsx_files/hyperlink44.xlsx t/regression/xlsx_files/hyperlink45.xlsx t/regression/xlsx_files/hyperlink46.xlsx t/regression/xlsx_files/hyperlink47.xlsx t/regression/xlsx_files/hyperlink48.xlsx t/regression/xlsx_files/hyperlink49.xlsx t/regression/xlsx_files/hyperlink50.xlsx t/regression/xlsx_files/hyperlink51.xlsx t/regression/xlsx_files/hyperlink52.xlsx t/regression/xlsx_files/ignore_error01.xlsx t/regression/xlsx_files/ignore_error02.xlsx t/regression/xlsx_files/ignore_error03.xlsx t/regression/xlsx_files/ignore_error04.xlsx t/regression/xlsx_files/ignore_error05.xlsx t/regression/xlsx_files/ignore_error06.xlsx t/regression/xlsx_files/image01.xlsx t/regression/xlsx_files/image02.xlsx t/regression/xlsx_files/image03.xlsx t/regression/xlsx_files/image04.xlsx t/regression/xlsx_files/image05.xlsx t/regression/xlsx_files/image06.xlsx t/regression/xlsx_files/image07.xlsx t/regression/xlsx_files/image08.xlsx t/regression/xlsx_files/image09.xlsx t/regression/xlsx_files/image10.xlsx t/regression/xlsx_files/image11.xlsx t/regression/xlsx_files/image12.xlsx t/regression/xlsx_files/image13.xlsx t/regression/xlsx_files/image14.xlsx t/regression/xlsx_files/image15.xlsx t/regression/xlsx_files/image16.xlsx t/regression/xlsx_files/image17.xlsx t/regression/xlsx_files/image18.xlsx t/regression/xlsx_files/image19.xlsx t/regression/xlsx_files/image22.xlsx t/regression/xlsx_files/image23.xlsx t/regression/xlsx_files/image24.xlsx t/regression/xlsx_files/image25.xlsx t/regression/xlsx_files/image26.xlsx t/regression/xlsx_files/image27.xlsx t/regression/xlsx_files/image28.xlsx t/regression/xlsx_files/image29.xlsx t/regression/xlsx_files/image30.xlsx t/regression/xlsx_files/image31.xlsx t/regression/xlsx_files/image32.xlsx t/regression/xlsx_files/image33.xlsx t/regression/xlsx_files/image34.xlsx t/regression/xlsx_files/image35.xlsx t/regression/xlsx_files/image36.xlsx t/regression/xlsx_files/image44.xlsx t/regression/xlsx_files/image45.xlsx t/regression/xlsx_files/image46.xlsx t/regression/xlsx_files/image47.xlsx t/regression/xlsx_files/image48.xlsx t/regression/xlsx_files/image49.xlsx t/regression/xlsx_files/image50.xlsx t/regression/xlsx_files/image51.xlsx t/regression/xlsx_files/image52.xlsx t/regression/xlsx_files/image53.xlsx t/regression/xlsx_files/image54.xlsx t/regression/xlsx_files/image55.xlsx t/regression/xlsx_files/image56.xlsx t/regression/xlsx_files/image57.xlsx t/regression/xlsx_files/image58.xlsx t/regression/xlsx_files/landscape01.xlsx t/regression/xlsx_files/macro01.xlsm t/regression/xlsx_files/macro02.xlsm t/regression/xlsx_files/macro03.xlsm t/regression/xlsx_files/merge_cells01.xlsx t/regression/xlsx_files/merge_range01.xlsx t/regression/xlsx_files/merge_range02.xlsx t/regression/xlsx_files/merge_range03.xlsx t/regression/xlsx_files/merge_range04.xlsx t/regression/xlsx_files/merge_range05.xlsx t/regression/xlsx_files/object_position01.xlsx t/regression/xlsx_files/object_position02.xlsx t/regression/xlsx_files/object_position03.xlsx t/regression/xlsx_files/object_position04.xlsx t/regression/xlsx_files/object_position06.xlsx t/regression/xlsx_files/object_position07.xlsx t/regression/xlsx_files/object_position08.xlsx t/regression/xlsx_files/object_position09.xlsx t/regression/xlsx_files/object_position10.xlsx t/regression/xlsx_files/object_position12.xlsx t/regression/xlsx_files/object_position13.xlsx t/regression/xlsx_files/object_position14.xlsx t/regression/xlsx_files/object_position15.xlsx t/regression/xlsx_files/object_position16.xlsx t/regression/xlsx_files/object_position17.xlsx t/regression/xlsx_files/object_position18.xlsx t/regression/xlsx_files/object_position19.xlsx t/regression/xlsx_files/object_position20.xlsx t/regression/xlsx_files/optimize01.xlsx t/regression/xlsx_files/optimize02.xlsx t/regression/xlsx_files/optimize03.xlsx t/regression/xlsx_files/optimize04.xlsx t/regression/xlsx_files/optimize05.xlsx t/regression/xlsx_files/optimize06.xlsx t/regression/xlsx_files/optimize07.xlsx t/regression/xlsx_files/optimize08.xlsx t/regression/xlsx_files/optimize13.xlsx t/regression/xlsx_files/optimize14.xlsx t/regression/xlsx_files/outline01.xlsx t/regression/xlsx_files/outline02.xlsx t/regression/xlsx_files/outline03.xlsx t/regression/xlsx_files/outline04.xlsx t/regression/xlsx_files/outline05.xlsx t/regression/xlsx_files/outline06.xlsx t/regression/xlsx_files/page_breaks01.xlsx t/regression/xlsx_files/page_breaks02.xlsx t/regression/xlsx_files/page_breaks03.xlsx t/regression/xlsx_files/page_breaks04.xlsx t/regression/xlsx_files/page_breaks05.xlsx t/regression/xlsx_files/page_breaks06.xlsx t/regression/xlsx_files/page_view01.xlsx t/regression/xlsx_files/page_view02.xlsx t/regression/xlsx_files/page_view03.xlsx t/regression/xlsx_files/panes01.xlsx t/regression/xlsx_files/print_across01.xlsx t/regression/xlsx_files/print_area01.xlsx t/regression/xlsx_files/print_area02.xlsx t/regression/xlsx_files/print_area03.xlsx t/regression/xlsx_files/print_area04.xlsx t/regression/xlsx_files/print_area05.xlsx t/regression/xlsx_files/print_area06.xlsx t/regression/xlsx_files/print_area07.xlsx t/regression/xlsx_files/print_area08.xlsx t/regression/xlsx_files/print_options01.xlsx t/regression/xlsx_files/print_options02.xlsx t/regression/xlsx_files/print_options03.xlsx t/regression/xlsx_files/print_options04.xlsx t/regression/xlsx_files/print_options05.xlsx t/regression/xlsx_files/print_options06.xlsx t/regression/xlsx_files/print_options07.xlsx t/regression/xlsx_files/print_scale01.xlsx t/regression/xlsx_files/print_scale02.xlsx t/regression/xlsx_files/properties01.xlsx t/regression/xlsx_files/properties02.xlsx t/regression/xlsx_files/properties03.xlsx t/regression/xlsx_files/properties04.xlsx t/regression/xlsx_files/properties05.xlsx t/regression/xlsx_files/properties06.xlsx t/regression/xlsx_files/protect01.xlsx t/regression/xlsx_files/protect02.xlsx t/regression/xlsx_files/protect03.xlsx t/regression/xlsx_files/protect04.xlsx t/regression/xlsx_files/protect05.xlsx t/regression/xlsx_files/protect06.xlsx t/regression/xlsx_files/protect07.xlsx t/regression/xlsx_files/protect08.xlsx t/regression/xlsx_files/quote_name01.xlsx t/regression/xlsx_files/quote_name02.xlsx t/regression/xlsx_files/quote_name03.xlsx t/regression/xlsx_files/quote_name04.xlsx t/regression/xlsx_files/quote_name05.xlsx t/regression/xlsx_files/quote_name06.xlsx t/regression/xlsx_files/quote_name07.xlsx t/regression/xlsx_files/quote_name08.xlsx t/regression/xlsx_files/quote_name09.xlsx t/regression/xlsx_files/quote_name10.xlsx t/regression/xlsx_files/quote_name11.xlsx t/regression/xlsx_files/repeat01.xlsx t/regression/xlsx_files/repeat02.xlsx t/regression/xlsx_files/repeat03.xlsx t/regression/xlsx_files/repeat04.xlsx t/regression/xlsx_files/repeat05.xlsx t/regression/xlsx_files/rich_string01.xlsx t/regression/xlsx_files/rich_string02.xlsx t/regression/xlsx_files/rich_string03.xlsx t/regression/xlsx_files/rich_string04.xlsx t/regression/xlsx_files/rich_string05.xlsx t/regression/xlsx_files/rich_string06.xlsx t/regression/xlsx_files/rich_string07.xlsx t/regression/xlsx_files/rich_string08.xlsx t/regression/xlsx_files/rich_string09.xlsx t/regression/xlsx_files/rich_string10.xlsx t/regression/xlsx_files/rich_string11.xlsx t/regression/xlsx_files/rich_string12.xlsx t/regression/xlsx_files/row_col_format01.xlsx t/regression/xlsx_files/row_col_format02.xlsx t/regression/xlsx_files/row_col_format03.xlsx t/regression/xlsx_files/row_col_format04.xlsx t/regression/xlsx_files/row_col_format05.xlsx t/regression/xlsx_files/row_col_format06.xlsx t/regression/xlsx_files/row_col_format07.xlsx t/regression/xlsx_files/row_col_format08.xlsx t/regression/xlsx_files/row_col_format09.xlsx t/regression/xlsx_files/row_col_format10.xlsx t/regression/xlsx_files/row_col_format11.xlsx t/regression/xlsx_files/row_col_format12.xlsx t/regression/xlsx_files/row_col_format13.xlsx t/regression/xlsx_files/row_col_format14.xlsx t/regression/xlsx_files/selection01.xlsx t/regression/xlsx_files/selection02.xlsx t/regression/xlsx_files/set_column01.xlsx t/regression/xlsx_files/set_column03.xlsx t/regression/xlsx_files/set_column04.xlsx t/regression/xlsx_files/set_column05.xlsx t/regression/xlsx_files/set_column06.xlsx t/regression/xlsx_files/set_column07.xlsx t/regression/xlsx_files/set_column08.xlsx t/regression/xlsx_files/set_column09.xlsx t/regression/xlsx_files/set_print_scale01.xlsx t/regression/xlsx_files/set_row01.xlsx t/regression/xlsx_files/set_row03.xlsx t/regression/xlsx_files/set_start_page01.xlsx t/regression/xlsx_files/set_start_page02.xlsx t/regression/xlsx_files/set_start_page03.xlsx t/regression/xlsx_files/shape_connect01.xlsx t/regression/xlsx_files/shape_connect02.xlsx t/regression/xlsx_files/shape_connect03.xlsx t/regression/xlsx_files/shape_connect04.xlsx t/regression/xlsx_files/shape_scale01.xlsx t/regression/xlsx_files/shape_stencil01.xlsx t/regression/xlsx_files/shape01.xlsx t/regression/xlsx_files/shape02.xlsx t/regression/xlsx_files/shape03.xlsx t/regression/xlsx_files/shape04.xlsx t/regression/xlsx_files/shared_strings01.xlsx t/regression/xlsx_files/shared_strings02.xlsx t/regression/xlsx_files/simple01.xlsx t/regression/xlsx_files/simple02.xlsx t/regression/xlsx_files/simple03.xlsx t/regression/xlsx_files/simple04.xlsx t/regression/xlsx_files/simple05.xlsx t/regression/xlsx_files/tab_color01.xlsx t/regression/xlsx_files/table01.xlsx t/regression/xlsx_files/table02.xlsx t/regression/xlsx_files/table03.xlsx t/regression/xlsx_files/table04.xlsx t/regression/xlsx_files/table05.xlsx t/regression/xlsx_files/table06.xlsx t/regression/xlsx_files/table07.xlsx t/regression/xlsx_files/table08.xlsx t/regression/xlsx_files/table09.xlsx t/regression/xlsx_files/table10.xlsx t/regression/xlsx_files/table11.xlsx t/regression/xlsx_files/table12.xlsx t/regression/xlsx_files/table13.xlsx t/regression/xlsx_files/table14.xlsx t/regression/xlsx_files/table15.xlsx t/regression/xlsx_files/table17.xlsx t/regression/xlsx_files/table18.xlsx t/regression/xlsx_files/table19.xlsx t/regression/xlsx_files/table21.xlsx t/regression/xlsx_files/table22.xlsx t/regression/xlsx_files/table23.xlsx t/regression/xlsx_files/table24.xlsx t/regression/xlsx_files/table25.xlsx t/regression/xlsx_files/table26.xlsx t/regression/xlsx_files/table27.xlsx t/regression/xlsx_files/table28.xlsx t/regression/xlsx_files/table29.xlsx t/regression/xlsx_files/table30.xlsx t/regression/xlsx_files/table31.xlsx t/regression/xlsx_files/table32.xlsx t/regression/xlsx_files/table33.xlsx t/regression/xlsx_files/table34.xlsx t/regression/xlsx_files/table35.xlsx t/regression/xlsx_files/table36.xlsx t/regression/xlsx_files/taint01.xlsx t/regression/xlsx_files/taint02.xlsx t/regression/xlsx_files/top_left_cell01.xlsx t/regression/xlsx_files/top_left_cell02.xlsx t/regression/xlsx_files/top_left_cell03.xlsx t/regression/xlsx_files/tutorial01.xlsx t/regression/xlsx_files/tutorial02.xlsx t/regression/xlsx_files/tutorial03.xlsx t/regression/xlsx_files/types02.xlsx t/regression/xlsx_files/types08.xlsx t/regression/xlsx_files/utf8_01.xlsx t/regression/xlsx_files/utf8_02.xlsx t/regression/xlsx_files/utf8_03.xlsx t/regression/xlsx_files/utf8_04.xlsx t/regression/xlsx_files/utf8_05.xlsx t/regression/xlsx_files/utf8_06.xlsx t/regression/xlsx_files/utf8_07.xlsx t/regression/xlsx_files/utf8_08.xlsx t/regression/xlsx_files/utf8_09.xlsx t/regression/xlsx_files/utf8_10.xlsx t/regression/xlsx_files/utf8_11.xlsx t/regression/xlsx_files/vbaProject01.bin t/regression/xlsx_files/vbaProject02.bin t/regression/xlsx_files/vbaProject03.bin t/regression/xlsx_files/vbaProject04.bin t/regression/xlsx_files/vml01.xlsx t/regression/xlsx_files/vml02.xlsx t/regression/xlsx_files/vml03.xlsx t/regression/xlsx_files/vml04.xlsx t/utility/quote_sheetname.t t/utility/xl_cell_to_rowcol.t t/utility/xl_col_to_name.t t/utility/xl_date_1904.t t/utility/xl_date_list.t t/utility/xl_dec_col.t t/utility/xl_dec_row.t t/utility/xl_decode_date_EU.t t/utility/xl_decode_date_US.t t/utility/xl_inc_col.t t/utility/xl_inc_row.t t/utility/xl_parse_date.t t/utility/xl_parse_time.t t/utility/xl_range_formula.t t/utility/xl_range.t t/utility/xl_rowcol_to_cell.t t/utility/xl_string_pixel_width.t t/workbook/sub_close.t t/workbook/sub_get_chart_range.t t/workbook/sub_sort_defined_names.t t/workbook/sub_write_book_views.t t/workbook/sub_write_calc_pr.t t/workbook/sub_write_defined_name.t t/workbook/sub_write_defined_names.t t/workbook/sub_write_ext_lst.t t/workbook/sub_write_ext.t t/workbook/sub_write_file_version.t t/workbook/sub_write_mx_arch_id.t t/workbook/sub_write_sheet.t t/workbook/sub_write_sheets.t t/workbook/sub_write_workbook_pr.t t/workbook/sub_write_workbook_view.t t/workbook/sub_write_workbook.t t/workbook/sub_write_xml_declaration.t t/workbook/workbook_01.t t/workbook/workbook_02.t t/workbook/workbook_03.t t/workbook/workbook_check_sheetname.t t/workbook/workbook_get_worksheet_by_name.t t/worksheet/sparkline_01.t t/worksheet/sparkline_02.t t/worksheet/sparkline_03.t t/worksheet/sparkline_04.t t/worksheet/sparkline_05.t t/worksheet/sparkline_06.t t/worksheet/sparkline_07.t t/worksheet/sparkline_08.t t/worksheet/sparkline_09.t t/worksheet/sparkline_10.t t/worksheet/sparkline_11.t t/worksheet/sparkline_12.t t/worksheet/sub_calculate_spans.t t/worksheet/sub_convert_date_time_01.t t/worksheet/sub_convert_date_time_02.t t/worksheet/sub_convert_date_time_03.t t/worksheet/sub_extract_filter_tokens.t t/worksheet/sub_parse_filter_expression.t t/worksheet/sub_pixels_to_row_col.t t/worksheet/sub_position_object.t t/worksheet/sub_prepare_formula.t t/worksheet/sub_repeat_formula.t t/worksheet/sub_write_auto_filter.t t/worksheet/sub_write_brk.t t/worksheet/sub_write_cell_value.t t/worksheet/sub_write_cell.t t/worksheet/sub_write_col_breaks.t t/worksheet/sub_write_col_info.t t/worksheet/sub_write_conditional_formatting.t t/worksheet/sub_write_custom_filter.t t/worksheet/sub_write_custom_filters.t t/worksheet/sub_write_data_validations_01.t t/worksheet/sub_write_data_validations_02.t t/worksheet/sub_write_dimension.t t/worksheet/sub_write_filter_column.t t/worksheet/sub_write_filter.t t/worksheet/sub_write_filters.t t/worksheet/sub_write_header_footer.t t/worksheet/sub_write_hyperlink.t t/worksheet/sub_write_legacy_drawing.t t/worksheet/sub_write_merge_cell.t t/worksheet/sub_write_merge_cells.t t/worksheet/sub_write_page_margins.t t/worksheet/sub_write_page_set_up_pr.t t/worksheet/sub_write_page_setup.t t/worksheet/sub_write_pane.t t/worksheet/sub_write_phonetic_pr.t t/worksheet/sub_write_print_options.t t/worksheet/sub_write_row_breaks.t t/worksheet/sub_write_row.t t/worksheet/sub_write_selection.t t/worksheet/sub_write_sheet_calc_pr.t t/worksheet/sub_write_sheet_data.t t/worksheet/sub_write_sheet_format_pr.t t/worksheet/sub_write_sheet_pr.t t/worksheet/sub_write_sheet_protection.t t/worksheet/sub_write_sheet_view.t t/worksheet/sub_write_sheet_views1.t t/worksheet/sub_write_sheet_views2.t t/worksheet/sub_write_sheet_views3.t t/worksheet/sub_write_sheet_views4.t t/worksheet/sub_write_sheet_views5.t t/worksheet/sub_write_sheet_views6.t t/worksheet/sub_write_sheet_views7.t t/worksheet/sub_write_sheet_views8.t t/worksheet/sub_write_sheet_views9.t t/worksheet/sub_write_tab_color.t t/worksheet/sub_write_worksheet.t t/worksheet/sub_write_xml_declaration.t t/worksheet/test_range_return_values.t t/worksheet/worksheet_01.t t/worksheet/worksheet_02.t t/worksheet/worksheet_03.t t/worksheet/worksheet_04.t t/worksheet/worksheet_array_formula_01.t t/worksheet/worksheet_cond_format_01.t t/worksheet/worksheet_cond_format_02.t t/worksheet/worksheet_cond_format_03.t t/worksheet/worksheet_cond_format_04.t t/worksheet/worksheet_cond_format_05.t t/worksheet/worksheet_cond_format_06.t t/worksheet/worksheet_cond_format_07.t t/worksheet/worksheet_cond_format_08.t t/worksheet/worksheet_cond_format_09.t t/worksheet/worksheet_cond_format_10.t t/worksheet/worksheet_cond_format_11.t t/worksheet/worksheet_cond_format_12.t t/worksheet/worksheet_cond_format_13.t t/worksheet/worksheet_cond_format_14.t t/worksheet/worksheet_cond_format_15.t t/worksheet/worksheet_cond_format_16.t t/worksheet/worksheet_cond_format_17.t t/worksheet/worksheet_cond_format_18.t t/worksheet/worksheet_cond_format_19.t t/worksheet/worksheet_cond_format_20.t t/worksheet/worksheet_cond_format_21.t t/worksheet/worksheet_cond_format_22.t t/worksheet/worksheet_cond_format_23.t t/worksheet/worksheet_cond_format_24.t t/worksheet/worksheet_cond_format_25.t t/worksheet/worksheet_data_bar_01.t t/worksheet/worksheet_data_bar_02.t t/worksheet/worksheet_data_bar_03.t t/worksheet/worksheet_data_bar_04.t t/worksheet/worksheet_data_bar_05.t t/worksheet/worksheet_data_bar_06.t t/worksheet/worksheet_data_bar_07.t t/worksheet/worksheet_data_bar_08.t t/worksheet/worksheet_data_bar_09.t t/worksheet/worksheet_data_bar_10.t t/worksheet/worksheet_data_bar_11.t t/worksheet/worksheet_data_bar_12.t t/worksheet/worksheet_data_bar_13.t t/worksheet/worksheet_encode_password.t t/worksheet/worksheet_merge_cells_01.t t/worksheet/worksheet_merge_cells_02.t t/worksheet/worksheet_merge_cells_03.t META.yml Module YAML meta-data (added by MakeMaker) META.json Module JSON meta-data (added by MakeMaker) Excel-Writer-XLSX-1.15/t/0000755000076500000240000000000015061323122013565 5ustar JohnstaffExcel-Writer-XLSX-1.15/t/drawing/0000755000076500000240000000000015061323123015221 5ustar JohnstaffExcel-Writer-XLSX-1.15/t/drawing/drawing_shape_02.t0000644000076500000240000000643315061072563020541 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Shape; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $shape = Excel::Writer::XLSX::Shape->new(); # Set shape properties via AUTOLOAD $shape->set_id(1000); $shape->set_name('Connector 1'); # Set bulk shape properties via set_properties method $shape->set_properties(type => 'straightConnector1', connect => 1); my $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->{_embedded} = 1; ############################################################################### # # Test the _assemble_xml_file() method for connections # $caption = " \tDrawing: _assemble_xml_file() shape connection"; my @dimensions = ( 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000 ); my $drawing_object = $drawing->_add_drawing_object(); $drawing_object->{_type} = 3; $drawing_object->{_dimensions} = \@dimensions; $drawing_object->{_width} = 95250; $drawing_object->{_height} = 190500; $drawing_object->{_description} = undef; $drawing_object->{_shape} = $shape; $drawing_object->{_anchor} = 1; $drawing->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 4 209550 8 95250 12 209660 22 96260 Excel-Writer-XLSX-1.15/t/drawing/drawing_shape_08.t0000644000076500000240000000407615061072563020550 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Worksheet; use Excel::Writer::XLSX::Shape; use Test::More tests => 2; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; our $WARN_TEXT; $SIG{__WARN__} = sub { $WARN_TEXT = shift; }; my $sheet = Excel::Writer::XLSX::Worksheet->new(); my $shape = Excel::Writer::XLSX::Shape->new(); my $inserted1 = $sheet->insert_shape( 4, 8, $shape, 300, 400 ); my $inserted2 = $sheet->insert_shape( 8, 12, $shape, 500, 750 ); my $cxn_shape = Excel::Writer::XLSX::Shape->new( undef, name => 'link', type => 'bentConnector3' ); ############################################################################### # # Test missing start connection # $cxn_shape->set_start( 9999 ); # bogus shape id $cxn_shape->set_start_index( 4 ); $cxn_shape->set_start_side( 'b' ); $cxn_shape->set_end( $inserted2->get_id() ); $cxn_shape->set_end_index( 0 ); # 0 - top connection point $cxn_shape->set_end_side( 't' ); # l)eft or t)op $sheet->insert_shape( 1, 1, $cxn_shape ); $caption = " \tWorksheet: _auto_locate_connector() - missing start connection"; $expected = "missing start connection for 'link', id=9999\n"; _is_deep_diff( \$WARN_TEXT, \$expected, $caption ); ############################################################################### # # Test missing end connection # $caption = " \tWorksheet: _auto_locate_connector() - missing end connection"; $cxn_shape->set_start( $inserted1->get_id() ); $cxn_shape->set_end( 9999 ); # bogus shape id $sheet->insert_shape( 1, 1, $cxn_shape ); $expected = "missing end connection for 'link', id=9999\n"; _is_deep_diff( \$WARN_TEXT, \$expected, $caption ); Excel-Writer-XLSX-1.15/t/drawing/drawing_shape_06.t0000644000076500000240000000261115061072563020537 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Shape; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $shape = Excel::Writer::XLSX::Shape->new(); $shape->set_adjustments(-10, 100, 20); my $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->{_embedded} = 1; ############################################################################### # # Test the _write_a_av_lst() method. # $caption = " \tDrawing: _write_a_av_lst() shape adjustments"; $drawing->_add_drawing_object( 3, 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000, 95250, 190500, '', $shape ); $drawing->_write_a_av_lst( $shape ); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_xfrm_offset.t0000644000076500000240000000160715061072563022030 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_xfrm_offset() method. # $caption = " \tDrawing: _write_xfrm_offset()"; $expected = ''; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_xfrm_offset(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/drawing_chart_01.t0000644000076500000240000000516215061072563020537 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tDrawing: _assemble_xml_file()"; my @dimensions = ( 4, 8, 457200, 104775, 12, 22, 152400, 180975 ); my $drawing_object = $drawing->_add_drawing_object(); $drawing_object->{_type} = 1; $drawing_object->{_dimensions} = \@dimensions; $drawing_object->{_width} = undef; $drawing_object->{_height} = undef; $drawing_object->{_description} = undef; $drawing_object->{_shape} = undef; $drawing_object->{_anchor} = 1; $drawing_object->{_rel_index} = 1; $drawing->{_embedded} = 1; $drawing->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 4 457200 8 104775 12 152400 22 180975 Excel-Writer-XLSX-1.15/t/drawing/sub_write_col_off.t0000644000076500000240000000161615061072563021115 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_col_off() method. # $caption = " \tDrawing: _write_col_off()"; $expected = '457200'; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_col_off( 457200 ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/drawing_shape_01.t0000644000076500000240000000607215061072563020537 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Shape; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $shape = Excel::Writer::XLSX::Shape->new(); $shape->set_id(1000); my $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->{_embedded} = 1; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tDrawing: _assemble_xml_file() shape object"; my @dimensions = ( 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000 ); my $drawing_object = $drawing->_add_drawing_object(); $drawing_object->{_type} = 3; $drawing_object->{_dimensions} = \@dimensions; $drawing_object->{_width} = 95250; $drawing_object->{_height} = 190500; $drawing_object->{_description} = undef; $drawing_object->{_shape} = $shape; $drawing_object->{_anchor} = 1; $drawing->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 4 209550 8 95250 12 209660 22 96260 Excel-Writer-XLSX-1.15/t/drawing/drawing_shape_05.t0000644000076500000240000000303215061072563020534 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Shape; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $worksheet = Excel::Writer::XLSX::Worksheet->new(); my $shape = Excel::Writer::XLSX::Shape->new(); $shape->set_id(1000); $shape->set_flip_v(1); $shape->set_flip_h(1); $shape->set_rotation(90); my $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->{_palette} = $worksheet->{_palette}; $drawing->{_embedded} = 1; ############################################################################### # # Test the _write_a_xfrm() method. # $caption = " \tDrawing: _write_a_xfrm() shape rotation/flip"; $drawing->_add_drawing_object( 3, 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000, 95250, 190500, '', $shape ); $drawing->_write_a_xfrm( 100, 200, 10, 20, $shape ); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_row.t0000644000076500000240000000156215061072563020315 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_row() method. # $caption = " \tDrawing: _write_row()"; $expected = '8'; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_row( 8 ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_pos.t0000644000076500000240000000156715061072563020314 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_pos() method. # $caption = " \tDrawing: _write_pos()"; $expected = ''; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_pos( 0, 0 ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_c_chart.t0000644000076500000240000000202415061072563021103 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_c_chart() method. # $caption = " \tDrawing: _write_c_chart()"; $expected = ''; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_c_chart( 'rId1' ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_row_off.t0000644000076500000240000000161615061072563021147 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_row_off() method. # $caption = " \tDrawing: _write_row_off()"; $expected = '104775'; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_row_off( 104775 ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_c_nv_pr.t0000644000076500000240000000162715061072563021136 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_c_nv_pr() method. # $caption = " \tDrawing: _write_c_nv_pr()"; $expected = ''; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_c_nv_pr( 2, 'Chart 1' ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/drawing_shape_04.t0000644000076500000240000001017415061072563020540 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Worksheet; use Excel::Writer::XLSX::Shape; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got1; my $got2; my $shape = Excel::Writer::XLSX::Shape->new( undef, text => 'test', id => 1000 ); # Mock up the color palette. $shape->{_palette}->[0] = [ 0x00, 0x00, 0x00, 0x00 ]; $shape->{_palette}->[7] = [ 0x00, 0x00, 0x00, 0x00 ]; my $drawing = _new_object( \$got1, 'Excel::Writer::XLSX::Drawing' ); $drawing->{_embedded} = 2; ############################################################################### # # Test the _assemble_xml_file() method for shape text # $caption = " \tDrawing: _assemble_xml_file() shape text"; my @dimensions = ( 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000 ); my $drawing_object = $drawing->_add_drawing_object(); $drawing_object->{_type} = 3; $drawing_object->{_dimensions} = \@dimensions; $drawing_object->{_width} = 95250; $drawing_object->{_height} = 190500; $drawing_object->{_description} = undef; $drawing_object->{_shape} = $shape; $drawing_object->{_anchor} = 1; $drawing->_assemble_xml_file(); $expected = _expected_to_aref(); $got1 = _got_to_aref( $got1 ); _is_deep_diff( $got1, $expected, $caption ); __DATA__ 4 209550 8 95250 12 209660 22 96260 test Excel-Writer-XLSX-1.15/t/drawing/drawing_image_01.t0000644000076500000240000000531515061072563020520 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tDrawing: _assemble_xml_file()"; my @dimensions = ( 2, 1, 0, 0, 3, 6, 533257, 190357, 1219200, 190500 ); my $drawing_object = $drawing->_add_drawing_object(); $drawing_object->{_type} = 2; $drawing_object->{_dimensions} = \@dimensions; $drawing_object->{_width} = 1142857; $drawing_object->{_height} = 1142857; $drawing_object->{_description} = 'republic.png'; $drawing_object->{_shape} = undef; $drawing_object->{_anchor} = 2; $drawing_object->{_rel_index} = 1; $drawing->{_embedded} = 1; $drawing->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 2 0 1 0 3 533257 6 190357 Excel-Writer-XLSX-1.15/t/drawing/sub_write_ext.t0000644000076500000240000000162515061072563020306 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_ext() method. # $caption = " \tDrawing: _write_ext()"; $expected = ''; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_xdr_ext( 9308969, 6078325 ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_c_nv_graphic_frame_pr.t0000644000076500000240000000256615061072563024010 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 2; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_c_nv_graphic_frame_pr() method. # $caption = " \tDrawing: _write_c_nv_graphic_frame_pr()"; $expected = ''; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->{_embedded} = 1; $drawing->_write_c_nv_graphic_frame_pr(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_c_nv_graphic_frame_pr() method. # $caption = " \tDrawing: _write_c_nv_graphic_frame_pr()"; $expected = ''; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_c_nv_graphic_frame_pr(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/drawing_shape_03.t0000644000076500000240000000326215061072563020537 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Shape; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $worksheet = Excel::Writer::XLSX::Worksheet->new(); my $shape = Excel::Writer::XLSX::Shape->new(); $shape->set_id(1000); $shape->set_start(1001); $shape->set_start_index(1); $shape->set_end(1002); $shape->set_end_index(4); my $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->{_palette} = $worksheet->{_palette}; $drawing->{_embedded} = 1; ############################################################################### # # Test the _assemble_xml_file() method for shape connections. # $caption = " \tDrawing: _write_nv_cxn_sp_pr() shape connection"; $drawing->_add_drawing_object( 3, 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000, 95250, 190500, '', $shape, 1 ); $drawing->_write_nv_cxn_sp_pr( 1, $shape ); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_col.t0000644000076500000240000000156215061072563020263 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_col() method. # $caption = " \tDrawing: _write_col()"; $expected = '4'; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_col( 4 ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_xfrm_extension.t0000644000076500000240000000161415061072563022554 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_xfrm_offset() method. # $caption = " \tDrawing: _write_xfrm_offset()"; $expected = ''; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_xfrm_extension(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_a_graphic_frame_locks.t0000644000076500000240000000166115061072563023770 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $drawing; ############################################################################### # # Test the _write_a_graphic_frame_locks() method. # $caption = " \tDrawing: _write_a_graphic_frame_locks()"; $expected = ''; $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->_write_a_graphic_frame_locks(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/drawing/drawing_shape_07.t0000644000076500000240000000266715061072563020553 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Shape; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $shape = Excel::Writer::XLSX::Shape->new(); $shape->set_line_weight(5); $shape->set_line_type('lgDashDot'); my $drawing = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); $drawing->{_embedded} = 1; ############################################################################### # # Test the _write_a_ln() method. # $caption = " \tDrawing: __write_a_ln() line weight and type"; $drawing->_add_drawing_object( 3, 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000, 95250, 190500, '', $shape ); $drawing->_write_a_ln( $shape ); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ Excel-Writer-XLSX-1.15/t/drawing/sub_write_xml_declaration.t0000644000076500000240000000161715061072563022654 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Drawing methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_new_object); use strict; use warnings; use Excel::Writer::XLSX::Drawing; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $obj = _new_object( \$got, 'Excel::Writer::XLSX::Drawing' ); ############################################################################### # # Test the xml_declaration() method. # $caption = " \tApp: xml_declaration()"; $expected = qq(\n); $obj->xml_declaration(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/chartsheet/0000755000076500000240000000000015061323123015720 5ustar JohnstaffExcel-Writer-XLSX-1.15/t/chartsheet/sub_write_sheet_protection.t0000644000076500000240000001050515061072563023560 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Chartsheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_object'; use strict; use warnings; use Test::More tests => 7; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $chartsheet; my $password; my %options; ############################################################################### # # 1. Test the _write_sheet_protection() method. # $caption = " \tChartsheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = (); $chartsheet = _new_object( \$got, 'Excel::Writer::XLSX::Chartsheet' ); $chartsheet->protect( $password, \%options ); $chartsheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_sheet_protection() method. # $caption = " \tChartsheet: _write_sheet_protection()"; $expected = ''; $password = 'password'; %options = (); $chartsheet = _new_object( \$got, 'Excel::Writer::XLSX::Chartsheet' ); $chartsheet->protect( $password, \%options ); $chartsheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_sheet_protection() method. # $caption = " \tChartsheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( objects => 0 ); $chartsheet = _new_object( \$got, 'Excel::Writer::XLSX::Chartsheet' ); $chartsheet->protect( $password, \%options ); $chartsheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_sheet_protection() method. # $caption = " \tChartsheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( content => 0); $chartsheet = _new_object( \$got, 'Excel::Writer::XLSX::Chartsheet' ); $chartsheet->protect( $password, \%options ); $chartsheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 5. Test the _write_sheet_protection() method. # $caption = " \tChartsheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( content => 0, objects => 0 ); $chartsheet = _new_object( \$got, 'Excel::Writer::XLSX::Chartsheet' ); $chartsheet->protect( $password, \%options ); $chartsheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 6. Test the _write_sheet_protection() method. # $caption = " \tChartsheet: _write_sheet_protection()"; $expected = ''; $password = 'password'; %options = ( content => 0, objects => 0 ); $chartsheet = _new_object( \$got, 'Excel::Writer::XLSX::Chartsheet' ); $chartsheet->protect( $password, \%options ); $chartsheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 7. Test the _write_sheet_protection() method. # $caption = " \tChartsheet: _write_sheet_protection()"; $expected = ''; $password = 'password'; %options = ( objects => 1, scenarios => 1, format_cells => 1, format_columns => 1, format_rows => 1, insert_columns => 1, insert_rows => 1, insert_hyperlinks => 1, delete_columns => 1, delete_rows => 1, select_locked_cells => 0, sort => 1, autofilter => 1, pivot_tables => 1, select_unlocked_cells => 0, ); $chartsheet = _new_object( \$got, 'Excel::Writer::XLSX::Chartsheet' ); $chartsheet->protect( $password, \%options ); $chartsheet->_write_sheet_protection(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/chartsheet/chartsheet01.t0000644000076500000240000000261315061072563020413 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Chartsheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_object); use strict; use warnings; use Excel::Writer::XLSX::Chartsheet; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $chartsheet = _new_object( \$got, 'Excel::Writer::XLSX::Chartsheet' ); ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tChartsheet: _assemble_xml_file()"; $chartsheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ Excel-Writer-XLSX-1.15/t/chartsheet/chartsheet_subs.t0000644000076500000240000000265115061072563021310 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Chartsheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_is_deep_diff); use strict; use warnings; use Excel::Writer::XLSX::Chartsheet; use Excel::Writer::XLSX::Chartsheet; use Test::More tests => 1; ############################################################################### # # Compare the subroutines in Chart/Chartsheet modules. # my $caption = " \tChartsheet: validate subroutines."; my @expected = _get_module_subs('Excel::Writer::XLSX::Chart'); my @got = _get_module_subs('Excel::Writer::XLSX::Chartsheet'); _is_deep_diff( \@got, \@expected, $caption ); ############################################################################### # # Find the subroutines in Chart/Chartsheet modules. # sub _get_module_subs { no strict 'refs'; my $module = shift; # Get the module functions. my @subs = sort keys %{"$module\::"}; # Only return the set_ type functions. @subs = grep { /^[a-z]+_/ } @subs; # Add any other methods shared with charts. push @subs, ('combine'); # Ignore xl_ imported functions. @subs = grep { /^[^x][^l]/ } @subs; # Ignore quote_sheetname imported functions. @subs = grep { ! /quote_sheetname/ } @subs; } __DATA__ Excel-Writer-XLSX-1.15/t/chartsheet/sub_write_xml_declaration.t0000644000076500000240000000162715061072563023354 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Chartsheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_new_object); use strict; use warnings; use Excel::Writer::XLSX::Chartsheet; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $caption; my $got; my $obj = _new_object( \$got, 'Excel::Writer::XLSX::Chartsheet' ); ############################################################################### # # Test the xml_declaration() method. # $caption = " \tApp: xml_declaration()"; $expected = qq(\n); $obj->xml_declaration(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/0000755000076500000240000000000015061323123015601 5ustar JohnstaffExcel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_09.t0000644000076500000240000000561115061072563022700 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); # Start test code. $worksheet->write( 'A1', 10 ); $worksheet->write( 'A2', 20 ); $worksheet->write( 'A3', 30 ); $worksheet->write( 'A4', 40 ); $worksheet->conditional_formatting( 'A1:A4', { type => 'blanks', format => undef, } ); $worksheet->conditional_formatting( 'A1:A4', { type => 'no_blanks', format => undef, } ); $worksheet->conditional_formatting( 'A1:A4', { type => 'errors', format => undef, } ); $worksheet->conditional_formatting( 'A1:A4', { type => 'no_errors', format => undef, } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 10 20 30 40 LEN(TRIM(A1))=0 LEN(TRIM(A1))>0 ISERROR(A1) NOT(ISERROR(A1)) Excel-Writer-XLSX-1.15/t/worksheet/sub_write_filter.t0000644000076500000240000000151315061072563021347 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_filter() method. # $caption = " \tWorksheet: _write_filter()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_filter( 'East' ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_page_margins.t0000644000076500000240000001207615061072563022524 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 11; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->set_margins(0.5); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->set_margins_LR(0.5); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->set_margins_TB(0.5); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->set_margin_left(0.5); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->set_margin_right(0.5); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->set_margin_top(0.5); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->set_margin_bottom(0.5); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->set_header('', 0.5); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->set_footer('', 0.5); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_page_margins() method. # $caption = " \tWorksheet: _write_page_margins()"; $expected = ''; $worksheet = _new_worksheet(\$got); # Test numeric value with whitespace. $worksheet->set_margins( " 0.5\n"); $worksheet->_write_page_margins(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_03.t0000644000076500000240000000522615061072563022674 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); # Start test code. $worksheet->write( 'A1', 10 ); $worksheet->write( 'A2', 20 ); $worksheet->write( 'A3', 30 ); $worksheet->write( 'A4', 40 ); $worksheet->conditional_formatting( 'A1:A4', { type => 'cell', format => undef, criteria => 'between', minimum => 20, maximum => 30, } ); $worksheet->conditional_formatting( 'A1:A4', { type => 'cell', format => undef, criteria => 'not between', minimum => 20, maximum => 30, } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 10 20 30 40 20 30 20 30 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_22.t0000644000076500000240000001502015061072563022666 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); # Start test code. $worksheet->write( 'A1', 1 ); $worksheet->write( 'A2', 2 ); $worksheet->write( 'A3', 3 ); $worksheet->write( 'A4', 4 ); $worksheet->write( 'A5', 5 ); $worksheet->write( 'A6', 6 ); $worksheet->write( 'A7', 7 ); $worksheet->write( 'A8', 8 ); $worksheet->write( 'A9', 9 ); $worksheet->conditional_formatting( 'A1', { type => 'icon_set', icon_style => '3_arrows', } ); $worksheet->conditional_formatting( 'A2', { type => 'icon_set', icon_style => '3_flags', } ); $worksheet->conditional_formatting( 'A3', { type => 'icon_set', icon_style => '3_traffic_lights_rimmed', } ); $worksheet->conditional_formatting( 'A4', { type => 'icon_set', icon_style => '3_symbols_circled', } ); $worksheet->conditional_formatting( 'A5', { type => 'icon_set', icon_style => '4_arrows', } ); $worksheet->conditional_formatting( 'A6', { type => 'icon_set', icon_style => '4_red_to_black', } ); $worksheet->conditional_formatting( 'A7', { type => 'icon_set', icon_style => '4_traffic_lights', } ); $worksheet->conditional_formatting( 'A8', { type => 'icon_set', icon_style => '5_arrows_gray', } ); $worksheet->conditional_formatting( 'A9', { type => 'icon_set', icon_style => '5_quarters', } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 1 2 3 4 5 6 7 8 9 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_filter_column.t0000644000076500000240000000164315061072563022730 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_filter_column() method. # $caption = " \tWorksheet: _write_filter_column()"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_filter_column( 0, 1, ['East'] ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_calc_pr.t0000644000076500000240000000154615061072563022663 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_sheet_calc_pr() method. # $caption = " \tWorksheet: _write_sheet_calc_pr()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_sheet_calc_pr(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sparkline_11.t0000644000076500000240000001513715061072563020277 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet( \$got ); $worksheet->{_excel_version} = 2010; $worksheet->{_name} = 'Sheet1'; $worksheet->select(); my $data = [ -2, 2, 3, -1, 0 ]; $worksheet->write( 'A1', $data ); $worksheet->write( 'A2', $data ); $worksheet->write( 'A3', $data ); $worksheet->write( 'A4', [ 1, 2, 3, 4, 5 ] ); # Set up sparklines $worksheet->add_sparkline( { location => 'F1', range => 'A1:E1', max => 0.5, min => -0.5, axis => 1, reverse => 1, empty_cells => 'zero', weight => 0.25, high_point => 1, low_point => 1, negative_points => 1, first_point => 1, last_point => 1, markers => 1, } ); $worksheet->add_sparkline( { location => 'F2', range => 'A2:E2', max => 'group', min => 'group', empty_cells => 'connect', weight => 2.25, } ); $worksheet->add_sparkline( { location => 'F3', range => 'A3:E3', max => 'group', min => '0', show_hidden => 1, weight => 6, date_axis => 'A4:E4', } ); # End sparkline $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ -2 2 3 -1 0 -2 2 3 -1 0 -2 2 3 -1 0 1 2 3 4 5 Sheet1!A4:E4 Sheet1!A3:E3 F3 Sheet1!A2:E2 F2 Sheet1!A1:E1 F1 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_07.t0000644000076500000240000000636715061072563022707 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); # Start test code. $worksheet->write( 'A1', 10 ); $worksheet->write( 'A2', 20 ); $worksheet->write( 'A3', 30 ); $worksheet->write( 'A4', 40 ); $worksheet->conditional_formatting( 'A1:A4', { type => 'text', criteria => 'containing', value => 'foo', format => undef, } ); $worksheet->conditional_formatting( 'A1:A4', { type => 'text', criteria => 'not containing', value => 'foo', format => undef, } ); $worksheet->conditional_formatting( 'A1:A4', { type => 'text', criteria => 'begins with', value => 'b', format => undef, } ); $worksheet->conditional_formatting( 'A1:A4', { type => 'text', criteria => 'ends with', value => 'b', format => undef, } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 10 20 30 40 NOT(ISERROR(SEARCH("foo",A1))) ISERROR(SEARCH("foo",A1)) LEFT(A1,1)="b" RIGHT(A1,1)="b" Excel-Writer-XLSX-1.15/t/worksheet/sub_write_col_info.t0000644000076500000240000000736715061072563021667 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 6; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; my $min; my $max; my $width; my $format; my $hidden; my $level; my $collapsed; ############################################################################### # # 1. Test the _write_col_info() method. # $min = 1; $max = 3; $width = 5; $format = undef; $hidden = 0; $level = 0; $collapsed = 0; $caption = " \tWorksheet: _write_col_info( $min, $max )"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_col_info( $min, $max, $width, $format, $hidden ); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_col_info() method. # $min = 5; $max = 5; $width = 8; $format = undef; $hidden = 1; $level = 0; $collapsed = 0; $caption = " \tWorksheet: _write_col_info( $min, $max )"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_col_info( $min, $max, $width, $format, $hidden ); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_col_info() method. # $min = 7; $max = 7; $width = undef; $format = Excel::Writer::XLSX::Format->new( {}, {}, xf_index => 1 ); $hidden = 0; $level = 0; $collapsed = 0; $caption = " \tWorksheet: _write_col_info( $min, $max )"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_col_info( $min, $max, $width, $format, $hidden ); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_col_info() method. # $min = 8; $max = 8; $width = 8.43; $format = Excel::Writer::XLSX::Format->new( {}, {}, xf_index => 1 ); $hidden = 0; $level = 0; $collapsed = 0; $caption = " \tWorksheet: _write_col_info( $min, $max )"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_col_info( $min, $max, $width, $format, $hidden ); is( $got, $expected, $caption ); ############################################################################### # # 5. Test the _write_col_info() method. # $min = 9; $max = 9; $width = 2; $format = undef; $hidden = 0; $level = 0; $collapsed = 0; $caption = " \tWorksheet: _write_col_info( $min, $max )"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_col_info( $min, $max, $width, $format, $hidden ); is( $got, $expected, $caption ); ############################################################################### # # 6. Test the _write_col_info() method. # $min = 11; $max = 11; $width = undef; $format = undef; $hidden = 1; $level = 0; $collapsed = 0; $caption = " \tWorksheet: _write_col_info( $min, $max )"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_col_info( $min, $max, $width, $format, $hidden ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_data_bar_12.t0000644000076500000240000001032115061072563022126 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->{_index} = 0; $worksheet->{_name} = 'Sheet1'; $worksheet->conditional_formatting( 'A1', { type => 'data_bar', data_bar_2010 => 1 } ); $worksheet->add_sparkline( { location => 'A2', range => 'Sheet1!B2', } ); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ {DA7ABA51-AAAA-BBBB-0001-000000000001} A1 Sheet1!B2 A2 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_custom_filter.t0000644000076500000240000000157615061072563022752 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_custom_filter() method. # $caption = " \tWorksheet: _write_custom_filter()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_custom_filter( 4, 3000 ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_views5.t0000644000076500000240000001004315061072563022472 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 7; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test for set_selection(). # ############################################################################### # # 1. Test the _write_sheet_views() method with selection set. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'A1' ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_sheet_views() method with selection set. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'A2' ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_sheet_views() method with selection set. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'B1' ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_sheet_views() method with selection set. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'D3' ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 5. Test the _write_sheet_views() method with selection set. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'D3:F4' ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 6. Test the _write_sheet_views() method with selection set. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'F4:D3' ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 7. Test the _write_sheet_views() method with selection set. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'A2:A2' ); # Should be the same as 'A2' $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sparkline_01.t0000644000076500000240000000415415061072563020273 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_excel_version} = 2010; $worksheet->{_name} = 'Sheet1'; $worksheet->select(); my $data = [ -2, 2, 3, -1, 0 ]; $worksheet->write('A1', $data); # Set up sparklines # No sparkline in the first testcase. # End sparklines $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ -2 2 3 -1 0 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_data_bar_08.t0000644000076500000240000000347415061072563022146 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->conditional_formatting( 'A1', { type => 'data_bar', bar_only => 1, } ); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_array_formula_01.t0000644000076500000240000000555115061072563023243 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test array formulas. # $caption = " \tWorksheet: _assemble_xml_file()"; my $format = undef; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->write( 'B1', [ [ 500, 10 ], [ 300, 15 ] ] ); $worksheet->write( 'B5', [ [ 1, 2, 3 ], [ 20234, 21003, 10000 ] ] ); $worksheet->write( 'A1', '{=SUM(B1:C1*B2:C2)}', $format, 9500 ); $worksheet->write_array_formula( 'A2:A2', '{=SUM(B1:C1*B2:C2)}', $format, 9500 ); $worksheet->write_array_formula( 'A5:A7', '{=TREND(C5:C7,B5:B7)}', $format, 22196 ); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ SUM(B1:C1*B2:C2) 9500 500 300 SUM(B1:C1*B2:C2) 9500 10 15 TREND(C5:C7,B5:B7) 22196 1 20234 0 2 21003 0 3 10000 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_custom_filters.t0000644000076500000240000000255715061072563023135 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 2; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_custom_filters() method. # $caption = " \tWorksheet: _write_custom_filters()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_custom_filters( 4, 4000 ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_custom_filters() method. # $caption = " \tWorksheet: _write_custom_filters()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_custom_filters( 4, 3000, 0, 1, 8000 ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_17.t0000644000076500000240000000702615061072563022701 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_date_1904} = 0; $worksheet->select(); # Start test code. $worksheet->write( 'A1', 1 ); $worksheet->write( 'A2', 2 ); $worksheet->write( 'A3', 3 ); $worksheet->write( 'A4', 4 ); $worksheet->write( 'A5', 5 ); $worksheet->write( 'A6', 6 ); $worksheet->write( 'A7', 7 ); $worksheet->write( 'A8', 8 ); $worksheet->write( 'A9', 9 ); $worksheet->write( 'A10', 10 ); $worksheet->write( 'A11', 11 ); $worksheet->write( 'A12', 12 ); $worksheet->conditional_formatting( 'A1:A12', { type => '3_color_scale', min_value => '$A$10', mid_value => 52, max_value => 99, min_type => 'num', mid_type => 'percent', max_type => 'percentile', } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 1 2 3 4 5 6 7 8 9 10 11 12 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_data_bar_02.t0000644000076500000240000000622615061072563022136 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->{_index} = 0; $worksheet->conditional_formatting( 'A1', { type => 'data_bar', data_bar_2010 => 1 } ); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ {DA7ABA51-AAAA-BBBB-0001-000000000001} A1 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_01.t0000644000076500000240000000263715061072563020322 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ Excel-Writer-XLSX-1.15/t/worksheet/sub_position_object.t0000644000076500000240000000630715061073170022043 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Tests for the _position_object_emus method used to calculate the twoCellAnchor # positions for drawing and chart objects. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_new_worksheet _is_deep_diff); use strict; use warnings; use Test::More tests => 6; ############################################################################### # # Tests setup. # my @expected; my @got; my $tmp = ''; my $caption; my $worksheet; ############################################################################### # # 1. Test _position_object_emus() for chart vertices. # $caption = " \tWorksheet: _position_object_emus()"; @expected = ( 4, 8, 0, 0, 11, 22, 304800, 76200, 2438400, 1524000 ); $worksheet = _new_worksheet( \$tmp ); @got = $worksheet->_position_object_emus( 4, 8, 0, 0, 480, 288 ); _is_deep_diff( \@got, \@expected, $caption ); ############################################################################### # # 2. Test _position_object_emus() for chart vertices. # $caption = " \tWorksheet: _position_object_emus()"; @expected = ( 4, 8, 0, 0, 12, 22, 0, 76200, 2438400, 1524000 ); $worksheet = _new_worksheet( \$tmp ); $worksheet->set_column( 'L:L', 3.86 ); @got = $worksheet->_position_object_emus( 4, 8, 0, 0, 480, 288 ); _is_deep_diff( \@got, \@expected, $caption ); ############################################################################### # # 3. Test _position_object_emus() for chart vertices. # $caption = " \tWorksheet: _position_object_emus()"; @expected = ( 4, 8, 0, 0, 12, 23, 0, 0, 2438400, 1524000 ); $worksheet = _new_worksheet( \$tmp ); $worksheet->set_column( 'L:L', 3.86 ); $worksheet->set_row( 22, 6 ); @got = $worksheet->_position_object_emus( 4, 8, 0, 0, 480, 288 ); _is_deep_diff( \@got, \@expected, $caption ); ############################################################################### # # 4. Test _position_object_emus() for image vertices. # $caption = " \tWorksheet: _position_object_emus()"; @expected = ( 4, 8, 0, 0, 4, 9, 304800, 114300, 2438400, 1524000 ); $worksheet = _new_worksheet( \$tmp ); @got = $worksheet->_position_object_emus( 4, 8, 0, 0, 32, 32 ); _is_deep_diff( \@got, \@expected, $caption ); ############################################################################### # # 5. Test _position_object_emus() for image vertices. # $caption = " \tWorksheet: _position_object_emus()"; @expected = ( 4, 8, 19050, 28575, 5, 11, 95250, 142875, 2457450, 1552575 ); $worksheet = _new_worksheet( \$tmp ); @got = $worksheet->_position_object_emus( 4, 8, 2, 3, 72, 72 ); _is_deep_diff( \@got, \@expected, $caption ); ############################################################################### # # 6. Test _position_object_emus() for image vertices. # $caption = " \tWorksheet: _position_object_emus()"; @expected = ( 5, 1, 19050, 28575, 6, 4, 352425, 114300, 3067050, 219075 ); $worksheet = _new_worksheet( \$tmp ); @got = $worksheet->_position_object_emus( 5, 1, 2, 3, 99, 69 ); _is_deep_diff( \@got, \@expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_data_bar_06.t0000644000076500000240000001343615061072563022143 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->{_index} = 0; $worksheet->conditional_formatting( 'A1', { type => 'data_bar', bar_negative_color_same => 1, } ); $worksheet->conditional_formatting( 'A2:B2', { type => 'data_bar', bar_color => '#63C384', bar_negative_border_color => '#92D050', } ); $worksheet->conditional_formatting( 'A3:C3', { type => 'data_bar', bar_color => '#FF555A', bar_negative_border_color_same => 1, } ); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ {DA7ABA51-AAAA-BBBB-0001-000000000001} {DA7ABA51-AAAA-BBBB-0001-000000000002} {DA7ABA51-AAAA-BBBB-0001-000000000003} A1 A2:B2 A3:C3 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_19.t0000644000076500000240000000674715061072563022714 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_date_1904} = 0; $worksheet->select(); # Start test code. $worksheet->write( 'A1', 1 ); $worksheet->write( 'A2', 2 ); $worksheet->write( 'A3', 3 ); $worksheet->write( 'A4', 4 ); $worksheet->write( 'A5', 5 ); $worksheet->write( 'A6', 6 ); $worksheet->write( 'A7', 7 ); $worksheet->write( 'A8', 8 ); $worksheet->write( 'A9', 9 ); $worksheet->write( 'A10', 10 ); $worksheet->write( 'A11', 11 ); $worksheet->write( 'A12', 12 ); $worksheet->conditional_formatting( 'A1:A12', { type => 'data_bar', min_value => 5, mid_value => 52, # Should be ignored. max_value => 90, min_type => 'num', mid_type => 'percentile', # Should be ignored. max_type => 'percent', bar_color => '#8DB4E3', } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 1 2 3 4 5 6 7 8 9 10 11 12 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_format_pr.t0000644000076500000240000000156115061072563023246 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_sheet_format_pr() method. # $caption = " \tWorksheet: _write_sheet_format_pr()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_sheet_format_pr(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_merge_cells_02.t0000644000076500000240000000404415061072563022656 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test merged cells. # $caption = " \tWorksheet: _assemble_xml_file()"; my $format1 = Excel::Writer::XLSX::Format->new( {}, {}, xf_index => 1 ); my $format2 = Excel::Writer::XLSX::Format->new( {}, {}, xf_index => 2 ); $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->merge_range( 'B3:C3', 'Foo', $format1); $worksheet->merge_range( 'A2:D2', undef, $format2); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 0 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_cell.t0000644000076500000240000000455615061072563021013 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 5; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; my $format = undef; ############################################################################### # # Test the _write_cell() method for numbers. # $caption = " \tWorksheet: _write_cell()"; $expected = '1'; $worksheet = _new_worksheet(\$got); $worksheet->_write_cell( 0, 0, [ 'n', 1 ] ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_cell() method for strings. # $caption = " \tWorksheet: _write_cell()"; $expected = '0'; $worksheet = _new_worksheet(\$got); $worksheet->_write_cell( 3, 1, [ 's', 0 ] ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_cell() method for formulas with an optional value. # $caption = " \tWorksheet: _write_cell()"; $expected = 'A3+A50'; $worksheet = _new_worksheet(\$got); $worksheet->_write_cell( 1, 2, [ 'f', 'A3+A5', $format, 0 ] ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_cell() method for formulas without an optional value. # $caption = " \tWorksheet: _write_cell()"; $expected = 'A3+A50'; $worksheet = _new_worksheet(\$got); $worksheet->_write_cell( 1, 2, [ 'f', 'A3+A5'] ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_cell() method for array formulas with an optional value. # $caption = " \tWorksheet: _write_cell()"; $expected = 'SUM(B1:C1*B2:C2)9500'; $worksheet = _new_worksheet(\$got); $worksheet->_write_cell( 0, 0, [ 'a', 'SUM(B1:C1*B2:C2)', $format, 'A1', 9500 ] ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_hyperlink.t0000644000076500000240000000423015061072563022066 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 4; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_hyperlink_external() method. # $caption = " \tWorksheet: _write_hyperlink_external()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_hyperlink_external( 0, 0, 1 ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_hyperlink_internal() method. # $caption = " \tWorksheet: _write_hyperlink_internal()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_hyperlink_internal( 0, 0, 'Sheet2!A1', 'Sheet2!A1' ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_hyperlink_internal() method. # $caption = " \tWorksheet: _write_hyperlink_internal()"; $expected = q(); $worksheet = _new_worksheet(\$got); $worksheet->_write_hyperlink_internal( 4, 0, "'Data Sheet'!D5", "'Data Sheet'!D5" ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_hyperlink_internal() method. # $caption = " \tWorksheet: _write_hyperlink_internal()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_hyperlink_internal( 17, 0, 'Sheet2!A1', 'Sheet2!A1', 'Screen Tip 1' ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_13.t0000644000076500000240000000653515061072563022701 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_date_1904} = 0; $worksheet->select(); # Start test code. $worksheet->write( 'A1', 1 ); $worksheet->write( 'A2', 2 ); $worksheet->write( 'A3', 3 ); $worksheet->write( 'A4', 4 ); $worksheet->write( 'A5', 5 ); $worksheet->write( 'A6', 6 ); $worksheet->write( 'A7', 7 ); $worksheet->write( 'A8', 8 ); $worksheet->write( 'A9', 9 ); $worksheet->write( 'A10', 10 ); $worksheet->write( 'A11', 11 ); $worksheet->write( 'A12', 12 ); $worksheet->conditional_formatting( 'A1:A12', { type => '3_color_scale', } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 1 2 3 4 5 6 7 8 9 10 11 12 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_views1.t0000644000076500000240000000622215061072563022472 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 6; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # 1. Test the _write_sheet_views() method. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_sheet_views() method. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_zoom( 100 ); # Default. Should be ignored. $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_sheet_views() method. With zoom. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_zoom( 200 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_sheet_views() method. Right to left. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->right_to_left(); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 5. Test the _write_sheet_views() method. Hide zeroes. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->hide_zero(); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 6. Test the _write_sheet_views() method. Set page view mode. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_page_view(); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_protection.t0000644000076500000240000002331215061072563023441 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 18; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; my $password; my %options; ############################################################################### # # 1. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = (); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = 'password'; %options = (); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( select_locked_cells => 0 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( format_cells => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 5. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( format_columns => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 6. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( format_rows => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 7. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( insert_columns => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 8. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( insert_rows => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 9. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( insert_hyperlinks => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 10. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( delete_columns => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 11. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( delete_rows => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 12. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( sort => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 13. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( autofilter => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 14. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( pivot_tables => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 15. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( objects => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 16. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( scenarios => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 17. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = ''; %options = ( format_cells => 1, select_locked_cells => 0, select_unlocked_cells => 0 ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); ############################################################################### # # 18. Test the _write_sheet_protection() method. # $caption = " \tWorksheet: _write_sheet_protection()"; $expected = ''; $password = 'drowssap'; %options = ( objects => 1, scenarios => 1, format_cells => 1, format_columns => 1, format_rows => 1, insert_columns => 1, insert_rows => 1, insert_hyperlinks => 1, delete_columns => 1, delete_rows => 1, select_locked_cells => 0, sort => 1, autofilter => 1, pivot_tables => 1, select_unlocked_cells => 0, ); $worksheet = _new_worksheet(\$got); $worksheet->protect( $password, \%options ); $worksheet->_write_sheet_protection(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_convert_date_time_02.t0000644000076500000240000003234715061072563022655 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet date and time handling. # Tests dates in 1900 and 1904 format. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 420; my $got; my $date_time; my $number; my $result; my $worksheet = _new_worksheet( \$got ); ############################################################################## # # Test the dates generated by Excel. # while () { last if /^# stop/; # For debugging $worksheet->{_date_1904} = 0 if /Excel 1900/; # Change date system $worksheet->{_date_1904} = 1 if /Excel 1904/; # Change date system next unless /\S/; # Ignore blank lines next if /^#/; # Ignore comments my ($count, $date, $result) = split; my $number = $worksheet->convert_date_time($date); $number = -1 unless defined $number; is($number, $result, " Testing convert_date_time: $date $result") } __DATA__ # # The following data was generated by Excel. # # # Excel 1900 date system # 1 1899-12-31T 0 2 1900-01-00T 0 3 1900-01-01T 1 4 1900-02-27T 58 5 1900-02-28T 59 6 1900-02-29T 60 7 1900-03-01T 61 8 1900-03-02T 62 9 1900-03-11T 71 10 1900-04-08T 99 11 1900-09-12T 256 12 1901-05-03T 489 13 1901-10-13T 652 14 1902-02-15T 777 15 1902-06-06T 888 16 1902-09-25T 999 17 1902-09-27T 1001 18 1903-04-26T 1212 19 1903-08-05T 1313 20 1903-12-31T 1461 21 1904-01-01T 1462 22 1904-02-28T 1520 23 1904-02-29T 1521 24 1904-03-01T 1522 25 1907-02-27T 2615 26 1907-02-28T 2616 27 1907-03-01T 2617 28 1907-03-02T 2618 29 1907-03-03T 2619 30 1907-03-04T 2620 31 1907-03-05T 2621 32 1907-03-06T 2622 33 1999-01-01T 36161 34 1999-01-31T 36191 35 1999-02-01T 36192 36 1999-02-28T 36219 37 1999-03-01T 36220 38 1999-03-31T 36250 39 1999-04-01T 36251 40 1999-04-30T 36280 41 1999-05-01T 36281 42 1999-05-31T 36311 43 1999-06-01T 36312 44 1999-06-30T 36341 45 1999-07-01T 36342 46 1999-07-31T 36372 47 1999-08-01T 36373 48 1999-08-31T 36403 49 1999-09-01T 36404 50 1999-09-30T 36433 51 1999-10-01T 36434 52 1999-10-31T 36464 53 1999-11-01T 36465 54 1999-11-30T 36494 55 1999-12-01T 36495 56 1999-12-31T 36525 57 2000-01-01T 36526 58 2000-01-31T 36556 59 2000-02-01T 36557 60 2000-02-29T 36585 61 2000-03-01T 36586 62 2000-03-31T 36616 63 2000-04-01T 36617 64 2000-04-30T 36646 65 2000-05-01T 36647 66 2000-05-31T 36677 67 2000-06-01T 36678 68 2000-06-30T 36707 69 2000-07-01T 36708 70 2000-07-31T 36738 71 2000-08-01T 36739 72 2000-08-31T 36769 73 2000-09-01T 36770 74 2000-09-30T 36799 75 2000-10-01T 36800 76 2000-10-31T 36830 77 2000-11-01T 36831 78 2000-11-30T 36860 79 2000-12-01T 36861 80 2000-12-31T 36891 81 2001-01-01T 36892 82 2001-01-31T 36922 83 2001-02-01T 36923 84 2001-02-28T 36950 85 2001-03-01T 36951 86 2001-03-31T 36981 87 2001-04-01T 36982 88 2001-04-30T 37011 89 2001-05-01T 37012 90 2001-05-31T 37042 91 2001-06-01T 37043 92 2001-06-30T 37072 93 2001-07-01T 37073 94 2001-07-31T 37103 95 2001-08-01T 37104 96 2001-08-31T 37134 97 2001-09-01T 37135 98 2001-09-30T 37164 99 2001-10-01T 37165 100 2001-10-31T 37195 101 2001-11-01T 37196 102 2001-11-30T 37225 103 2001-12-01T 37226 104 2001-12-31T 37256 105 2400-01-01T 182623 106 2400-01-31T 182653 107 2400-02-01T 182654 108 2400-02-29T 182682 109 2400-03-01T 182683 110 2400-03-31T 182713 111 2400-04-01T 182714 112 2400-04-30T 182743 113 2400-05-01T 182744 114 2400-05-31T 182774 115 2400-06-01T 182775 116 2400-06-30T 182804 117 2400-07-01T 182805 118 2400-07-31T 182835 119 2400-08-01T 182836 120 2400-08-31T 182866 121 2400-09-01T 182867 122 2400-09-30T 182896 123 2400-10-01T 182897 124 2400-10-31T 182927 125 2400-11-01T 182928 126 2400-11-30T 182957 127 2400-12-01T 182958 128 2400-12-31T 182988 129 4000-01-01T 767011 130 4000-01-31T 767041 131 4000-02-01T 767042 132 4000-02-29T 767070 133 4000-03-01T 767071 134 4000-03-31T 767101 135 4000-04-01T 767102 136 4000-04-30T 767131 137 4000-05-01T 767132 138 4000-05-31T 767162 139 4000-06-01T 767163 140 4000-06-30T 767192 141 4000-07-01T 767193 142 4000-07-31T 767223 143 4000-08-01T 767224 144 4000-08-31T 767254 145 4000-09-01T 767255 146 4000-09-30T 767284 147 4000-10-01T 767285 148 4000-10-31T 767315 149 4000-11-01T 767316 150 4000-11-30T 767345 151 4000-12-01T 767346 152 4000-12-31T 767376 153 4321-01-01T 884254 154 4321-01-31T 884284 155 4321-02-01T 884285 156 4321-02-28T 884312 157 4321-03-01T 884313 158 4321-03-31T 884343 159 4321-04-01T 884344 160 4321-04-30T 884373 161 4321-05-01T 884374 162 4321-05-31T 884404 163 4321-06-01T 884405 164 4321-06-30T 884434 165 4321-07-01T 884435 166 4321-07-31T 884465 167 4321-08-01T 884466 168 4321-08-31T 884496 169 4321-09-01T 884497 170 4321-09-30T 884526 171 4321-10-01T 884527 172 4321-10-31T 884557 173 4321-11-01T 884558 174 4321-11-30T 884587 175 4321-12-01T 884588 176 4321-12-31T 884618 177 9999-01-01T 2958101 178 9999-01-31T 2958131 179 9999-02-01T 2958132 180 9999-02-28T 2958159 181 9999-03-01T 2958160 182 9999-03-31T 2958190 183 9999-04-01T 2958191 184 9999-04-30T 2958220 185 9999-05-01T 2958221 186 9999-05-31T 2958251 187 9999-06-01T 2958252 188 9999-06-30T 2958281 189 9999-07-01T 2958282 190 9999-07-31T 2958312 191 9999-08-01T 2958313 192 9999-08-31T 2958343 193 9999-09-01T 2958344 194 9999-09-30T 2958373 195 9999-10-01T 2958374 196 9999-10-31T 2958404 197 9999-11-01T 2958405 198 9999-11-30T 2958434 199 9999-12-01T 2958435 200 9999-12-31T 2958465 # # Excel 1904 date system # 201 1904-01-01T 0 202 1904-01-31T 30 203 1904-02-01T 31 204 1904-02-29T 59 205 1904-03-01T 60 206 1904-03-31T 90 207 1904-04-01T 91 208 1904-04-30T 120 209 1904-05-01T 121 210 1904-05-31T 151 211 1904-06-01T 152 212 1904-06-30T 181 213 1904-07-01T 182 214 1904-07-31T 212 215 1904-08-01T 213 216 1904-08-31T 243 217 1904-09-01T 244 218 1904-09-30T 273 219 1904-10-01T 274 220 1904-10-31T 304 221 1904-11-01T 305 222 1904-11-30T 334 223 1904-12-01T 335 224 1904-12-31T 365 225 1907-02-27T 1153 226 1907-02-28T 1154 227 1907-03-01T 1155 228 1907-03-02T 1156 229 1907-03-03T 1157 230 1907-03-04T 1158 231 1907-03-05T 1159 232 1907-03-06T 1160 233 1999-01-01T 34699 234 1999-01-31T 34729 235 1999-02-01T 34730 236 1999-02-28T 34757 237 1999-03-01T 34758 238 1999-03-31T 34788 239 1999-04-01T 34789 240 1999-04-30T 34818 241 1999-05-01T 34819 242 1999-05-31T 34849 243 1999-06-01T 34850 244 1999-06-30T 34879 245 1999-07-01T 34880 246 1999-07-31T 34910 247 1999-08-01T 34911 248 1999-08-31T 34941 249 1999-09-01T 34942 250 1999-09-30T 34971 251 1999-10-01T 34972 252 1999-10-31T 35002 253 1999-11-01T 35003 254 1999-11-30T 35032 255 1999-12-01T 35033 256 1999-12-31T 35063 257 2000-01-01T 35064 258 2000-01-31T 35094 259 2000-02-01T 35095 260 2000-02-29T 35123 261 2000-03-01T 35124 262 2000-03-31T 35154 263 2000-04-01T 35155 264 2000-04-30T 35184 265 2000-05-01T 35185 266 2000-05-31T 35215 267 2000-06-01T 35216 268 2000-06-30T 35245 269 2000-07-01T 35246 270 2000-07-31T 35276 271 2000-08-01T 35277 272 2000-08-31T 35307 273 2000-09-01T 35308 274 2000-09-30T 35337 275 2000-10-01T 35338 276 2000-10-31T 35368 277 2000-11-01T 35369 278 2000-11-30T 35398 279 2000-12-01T 35399 280 2000-12-31T 35429 281 2001-01-01T 35430 282 2001-01-31T 35460 283 2001-02-01T 35461 284 2001-02-28T 35488 285 2001-03-01T 35489 286 2001-03-31T 35519 287 2001-04-01T 35520 288 2001-04-30T 35549 289 2001-05-01T 35550 290 2001-05-31T 35580 291 2001-06-01T 35581 292 2001-06-30T 35610 293 2001-07-01T 35611 294 2001-07-31T 35641 295 2001-08-01T 35642 296 2001-08-31T 35672 297 2001-09-01T 35673 298 2001-09-30T 35702 299 2001-10-01T 35703 300 2001-10-31T 35733 301 2001-11-01T 35734 302 2001-11-30T 35763 303 2001-12-01T 35764 304 2001-12-31T 35794 305 2400-01-01T 181161 306 2400-01-31T 181191 307 2400-02-01T 181192 308 2400-02-29T 181220 309 2400-03-01T 181221 310 2400-03-31T 181251 311 2400-04-01T 181252 312 2400-04-30T 181281 313 2400-05-01T 181282 314 2400-05-31T 181312 315 2400-06-01T 181313 316 2400-06-30T 181342 317 2400-07-01T 181343 318 2400-07-31T 181373 319 2400-08-01T 181374 320 2400-08-31T 181404 321 2400-09-01T 181405 322 2400-09-30T 181434 323 2400-10-01T 181435 324 2400-10-31T 181465 325 2400-11-01T 181466 326 2400-11-30T 181495 327 2400-12-01T 181496 328 2400-12-31T 181526 329 4000-01-01T 765549 330 4000-01-31T 765579 331 4000-02-01T 765580 332 4000-02-29T 765608 333 4000-03-01T 765609 334 4000-03-31T 765639 335 4000-04-01T 765640 336 4000-04-30T 765669 337 4000-05-01T 765670 338 4000-05-31T 765700 339 4000-06-01T 765701 340 4000-06-30T 765730 341 4000-07-01T 765731 342 4000-07-31T 765761 343 4000-08-01T 765762 344 4000-08-31T 765792 345 4000-09-01T 765793 346 4000-09-30T 765822 347 4000-10-01T 765823 348 4000-10-31T 765853 349 4000-11-01T 765854 350 4000-11-30T 765883 351 4000-12-01T 765884 352 4000-12-31T 765914 353 4321-01-01T 882792 354 4321-01-31T 882822 355 4321-02-01T 882823 356 4321-02-28T 882850 357 4321-03-01T 882851 358 4321-03-31T 882881 359 4321-04-01T 882882 360 4321-04-30T 882911 361 4321-05-01T 882912 362 4321-05-31T 882942 363 4321-06-01T 882943 364 4321-06-30T 882972 365 4321-07-01T 882973 366 4321-07-31T 883003 367 4321-08-01T 883004 368 4321-08-31T 883034 369 4321-09-01T 883035 370 4321-09-30T 883064 371 4321-10-01T 883065 372 4321-10-31T 883095 373 4321-11-01T 883096 374 4321-11-30T 883125 375 4321-12-01T 883126 376 4321-12-31T 883156 377 9999-01-01T 2956639 378 9999-01-31T 2956669 379 9999-02-01T 2956670 380 9999-02-28T 2956697 381 9999-03-01T 2956698 382 9999-03-31T 2956728 383 9999-04-01T 2956729 384 9999-04-30T 2956758 385 9999-05-01T 2956759 386 9999-05-31T 2956789 387 9999-06-01T 2956790 388 9999-06-30T 2956819 389 9999-07-01T 2956820 390 9999-07-31T 2956850 391 9999-08-01T 2956851 392 9999-08-31T 2956881 393 9999-09-01T 2956882 394 9999-09-30T 2956911 395 9999-10-01T 2956912 396 9999-10-31T 2956942 397 9999-11-01T 2956943 398 9999-11-30T 2956972 399 9999-12-01T 2956973 400 9999-12-31T 2957003 # # The following dates are invalid. # # # Excel 1900 date system # 401 0000-12-30T -1 # Below year range. 402 1000-12-30T -1 # Below year range. 403 1899-12-30T -1 # Below year range. 404 2002-02-29T -1 # False leap-day. 405 2000-00-00T -1 # No month or day. 406 2000-01-00T -1 # No day. 407 2000-00-01T -1 # No month. 408 2000-13-01T -1 # Month out of range. 409 2000-12-32T -1 # Day out of range. 410 10000-01-01T -1 # Year out of range. # # Excel 1904 date system # 411 1899-12-31T -1 # Below year range. 412 1900-01-01T -1 # Below year range. 413 1903-12-31T -1 # Below year range. 414 2001-02-29T -1 # False leap-day. 415 2000-00-00T -1 # No month or day. 416 2000-01-00T -1 # No day. 417 2000-00-01T -1 # No month. 418 2000-13-01T -1 # Month out of range. 419 2000-12-32T -1 # Day out of range. 420 10000-01-01T -1 # Year out of range. Excel-Writer-XLSX-1.15/t/worksheet/sparkline_05.t0000644000076500000240000000625615061072563020304 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_excel_version} = 2010; $worksheet->{_name} = 'Sheet1'; $worksheet->select(); my $data = [ -2, 2, 3, -1, 0 ]; $worksheet->write('A1', $data); # Set up sparklines $worksheet->add_sparkline( { location => ['$F$1'], range => ['$A$1:$E$1'], type => 'win_loss', } ); # End sparklines $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ -2 2 3 -1 0 Sheet1!A1:E1 F1 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_25.t0000644000076500000240000000346615061072563022704 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); # Start test code. $worksheet->conditional_formatting( 'A1', { type => 'cell', format => undef, criteria => '==', value => 'Test A2', } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ "Test A2" Excel-Writer-XLSX-1.15/t/worksheet/sub_write_page_set_up_pr.t0000644000076500000240000000160115061072563023054 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_page_set_up_pr() method. # $caption = " \tWorksheet: _write_page_set_up_pr()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->{_fit_page} = 1; $worksheet->_write_page_set_up_pr(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_data.t0000644000076500000240000000151015061072563022160 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_sheet_data() method. # $caption = " \tWorksheet: _write_sheet_data()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_sheet_data(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_auto_filter.t0000644000076500000240000003143715061072563022407 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 21; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; my $filter; my @matches; ############################################################################### # # Test the _write_auto_filter() method with no filter. # $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column()" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x == East'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x == East or x == North'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x == East and x == North'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x != East'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x == S*'; # Begins with character. $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x != S*'; # Doesn't begin with character. $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x == *h'; # Ends with character. $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x != *h'; # Doesn't end with character. $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x =~ *o*'; # Contains character. $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x !~ *r*'; # Doesn't contain character. $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'A', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x == 1000'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'C', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x != 2000'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'C', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x > 3000'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'C', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x >= 4000'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'C', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x < 5000'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'C', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x <= 6000'; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'C', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter() method for the following filter: # $filter = 'x >= 1000 and x <= 2000'; # Between. $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column( 'C', $filter ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '$filter' )" ); ############################################################################### # # Test the _write_auto_filter_list() method for the following filter: # @matches = qw( East ); $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column_list( 'A', @matches ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '@matches' )" ); ############################################################################### # # Test the _write_auto_filter_list() method for the following filter: # @matches = qw( East North ); $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column_list( 'A', @matches ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '@matches' )" ); ############################################################################### # # Test the _write_auto_filter_list() method for the following filter: # @matches = qw( February January July June ); $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_name} = 'Sheet1'; $worksheet->autofilter( 'A1:D51' ); $worksheet->filter_column_list( 'D', @matches ); $worksheet->_write_auto_filter(); is( $got, $expected, " \tWorksheet: filter_column( '@matches' )" ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_calculate_spans.t0000644000076500000240000002267015061072563022020 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use strict; use warnings; use Excel::Writer::XLSX::Worksheet; use Test::More tests => 18; ############################################################################### # # Tests setup. # my $got; my $expected; my $caption; my $row; my $col; my $worksheet; ############################################################################### # # 1. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 0; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:16', '17:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 2. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 1; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:15', '16:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 3. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 2; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:14', '15:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 4. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 3; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:13', '14:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 5. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 4; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:12', '13:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 6. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 5; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:11', '12:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 7. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 6; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:10', '11:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 8. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 7; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:9', '10:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 9. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 8; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:8', '9:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 10. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 9; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:7', '8:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 11. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 10; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:6', '7:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 12. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 11; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:5', '6:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 13. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 12; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:4', '5:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 14. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 13; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:3', '4:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 15. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 14; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:2', '3:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 16. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 15; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ '1:1', '2:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 17. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 16; $col = 0; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ undef, '1:16', '17:17' ]; is_deeply( $got, $expected, $caption ); ############################################################################### # # 18. Test _calculate_spans() method for range ($row, $col), ($row+16, $col+16). # $row = 16; $col = 1; $caption = " \tWorksheet: _calculate_spans()"; $worksheet = new Excel::Writer::XLSX::Worksheet; for ($row .. $row +16) { $worksheet->write($row++, $col++, 1); } $worksheet->_calculate_spans(); $got = $worksheet->{_row_spans}; $expected = [ undef, '2:17', '18:18' ]; is_deeply( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_col_breaks.t0000644000076500000240000000264215061072563022172 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 2; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_col_breaks() method. # $caption = " \tWorksheet: _write_col_breaks()"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_vbreaks} = [1]; $worksheet->_write_col_breaks(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_col_breaks() method. # $caption = " \tWorksheet: _write_col_breaks()"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->{_vbreaks} = [8, 3, 1, 0]; $worksheet->_write_col_breaks(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_merge_cells.t0000644000076500000240000000370215061072563022345 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Excel::Writer::XLSX::Format; use Test::More tests => 3; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; my $format = Excel::Writer::XLSX::Format->new( 0 ); ############################################################################### # # Test the _write_merge_cells() method. With $row, $col notation. # $caption = " \tWorksheet: _write_merge_cells()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->merge_range( 2, 1, 2, 2, 'Foo', $format); $worksheet->_write_merge_cells(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_merge_cells() method. With A1 notation. # $caption = " \tWorksheet: _write_merge_cells()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->merge_range( 'B3:C3', 'Foo', $format); $worksheet->_write_merge_cells(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_merge_cells() method. With more than one range. # $caption = " \tWorksheet: _write_merge_cells()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->merge_range( 'B3:C3', 'Foo', $format); $worksheet->merge_range( 'A2:D2', 'Foo', $format); $worksheet->_write_merge_cells(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_filters.t0000644000076500000240000000301015061072563021524 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 3; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_filters() method. # $caption = " \tWorksheet: _write_filters()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_filters( 'East' ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_filters() method. # $caption = " \tWorksheet: _write_filters()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_filters( 'East', 'South' ); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_filters() method. # $caption = " \tWorksheet: _write_filters()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_filters( 'blanks' ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_04.t0000644000076500000240000000452715061072563022700 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); # Start test code. $worksheet->write( 'A1', 10 ); $worksheet->write( 'A2', 20 ); $worksheet->write( 'A3', 30 ); $worksheet->write( 'A4', 40 ); $worksheet->conditional_formatting( 'A1:A4', { type => 'duplicate', format => undef, } ); $worksheet->conditional_formatting( 'A1:A4', { type => 'unique', format => undef, } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 10 20 30 40 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_data_bar_11.t0000644000076500000240000001475715061072563022146 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->{_index} = 0; $worksheet->conditional_formatting( 'A1', { type => 'data_bar', data_bar_2010 => 1, min_type => 'formula', min_value => '=$B$1', } ); $worksheet->conditional_formatting( 'A2:B2', { type => 'data_bar', bar_color => '#63C384', data_bar_2010 => 1, min_type => 'formula', max_type => 'formula', min_value => '=$B$1', max_value => '=$C$1', } ); $worksheet->conditional_formatting( 'A3:C3', { type => 'data_bar', bar_color => '#FF555A', data_bar_2010 => 1, min_type => 'percentile', max_type => 'percentile', min_value => 10, max_value => 90, } ); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ {DA7ABA51-AAAA-BBBB-0001-000000000001} {DA7ABA51-AAAA-BBBB-0001-000000000002} {DA7ABA51-AAAA-BBBB-0001-000000000003} $B$1 A1 $B$1 $C$1 A2:B2 10 90 A3:C3 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_21.t0000644000076500000240000000432415061072563022672 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); # Start test code. $worksheet->write( 'A1', 10 ); $worksheet->write( 'A2', 20 ); $worksheet->write( 'A3', 30 ); $worksheet->write( 'A4', 40 ); $worksheet->conditional_formatting( 'A1', { type => 'cell', format => undef, criteria => 'greater than', value => 5, stop_if_true => 1, } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 10 20 30 40 5 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_phonetic_pr.t0000644000076500000240000000155315061072563022400 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_phonetic_pr() method. # $caption = " \tWorksheet: _write_phonetic_pr()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_phonetic_pr(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_cell_value.t0000644000076500000240000000150515061072563022176 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_cell_value() method. # $caption = " \tWorksheet: _write_cell_value()"; $expected = '1'; $worksheet = _new_worksheet(\$got); $worksheet->_write_cell_value(1); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_print_options.t0000644000076500000240000000664215061072563023001 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 8; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_print_options() method. Without any options. # $caption = " \tWorksheet: _write_print_options()"; $expected = undef; $worksheet = _new_worksheet(\$got); $worksheet->_write_print_options(); is( $got, $expected, $caption ); $got = ''; # Reset after previous undef value; ############################################################################### # # Test the _write_print_options() method. # $caption = " \tWorksheet: _write_print_options()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->center_horizontally(); $worksheet->_write_print_options(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_print_options() method. # $caption = " \tWorksheet: _write_print_options()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->center_vertically(); $worksheet->_write_print_options(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_print_options() method. # $caption = " \tWorksheet: _write_print_options()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->center_horizontally(); $worksheet->center_vertically(); $worksheet->_write_print_options(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_print_options() method. # $caption = " \tWorksheet: _write_print_options()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->hide_gridlines(); $worksheet->_write_print_options(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_print_options() method. # $caption = " \tWorksheet: _write_print_options()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->hide_gridlines(0); $worksheet->_write_print_options(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_print_options() method. # $caption = " \tWorksheet: _write_print_options()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->hide_gridlines(); $worksheet->_write_print_options(1); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_print_options() method. # $caption = " \tWorksheet: _write_print_options()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->hide_gridlines(0); $worksheet->_write_print_options(2); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_merge_cell.t0000644000076500000240000000154215061072563022162 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_merge_cell() method. # $caption = " \tWorksheet: _write_merge_cell()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_merge_cell( [ 2, 1, 2, 2 ] ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sparkline_12.t0000644000076500000240000000635715061072563020304 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_excel_version} = 2010; $worksheet->{_name} = 'Sheet1'; $worksheet->select(); my $data = [ -2, 2, 3, -1, 0 ]; $worksheet->write('A1', $data); # Set up sparklines $worksheet->add_sparkline( { location => 'F1', range => 'Sheet1!A1:E1', max => 4, min => 0, } ); # End sparkline $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ -2 2 3 -1 0 Sheet1!A1:E1 F1 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_14.t0000644000076500000240000000634415061072563022700 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_date_1904} = 0; $worksheet->select(); # Start test code. $worksheet->write( 'A1', 1 ); $worksheet->write( 'A2', 2 ); $worksheet->write( 'A3', 3 ); $worksheet->write( 'A4', 4 ); $worksheet->write( 'A5', 5 ); $worksheet->write( 'A6', 6 ); $worksheet->write( 'A7', 7 ); $worksheet->write( 'A8', 8 ); $worksheet->write( 'A9', 9 ); $worksheet->write( 'A10', 10 ); $worksheet->write( 'A11', 11 ); $worksheet->write( 'A12', 12 ); $worksheet->conditional_formatting( 'A1:A12', { type => 'data_bar', } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 1 2 3 4 5 6 7 8 9 10 11 12 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_02.t0000644000076500000240000000304115061072563020311 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->write('B3', 123); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 123 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_data_bar_01.t0000644000076500000240000000342615061072563022134 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->conditional_formatting( 'A1', { type => 'data_bar' } ); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_dimension.t0000644000076500000240000001141315061072563022047 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 10; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; my $cell_ref; ############################################################################### # # 1. Test the _write_dimension() method with no dimensions set. # $caption = " \tWorksheet: _write_dimension(undef)"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_dimension(); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_dimension() method with dimensions set. # $cell_ref = 'A1'; $caption = " \tWorksheet: _write_dimension('$cell_ref')"; $expected = qq(); $worksheet = _new_worksheet(\$got); $worksheet->write( $cell_ref, 'some string' ); $worksheet->_write_dimension(); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_dimension() method with dimensions set. # $cell_ref = 'A1048576'; $caption = " \tWorksheet: _write_dimension('$cell_ref')"; $expected = qq(); $worksheet = _new_worksheet(\$got); $worksheet->write( $cell_ref, 'some string' ); $worksheet->_write_dimension(); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_dimension() method with dimensions set. # $cell_ref = 'XFD1'; $caption = " \tWorksheet: _write_dimension('$cell_ref')"; $expected = qq(); $worksheet = _new_worksheet(\$got); $worksheet->write( $cell_ref, 'some string' ); $worksheet->_write_dimension(); is( $got, $expected, $caption ); ############################################################################### # # 5. Test the _write_dimension() method with dimensions set. # $cell_ref = 'XFD1048576'; $caption = " \tWorksheet: _write_dimension('$cell_ref')"; $expected = qq(); $worksheet = _new_worksheet(\$got); $worksheet->write( $cell_ref, 'some string' ); $worksheet->_write_dimension(); is( $got, $expected, $caption ); ############################################################################### # # 6. Test the _write_dimension() method with dimensions set. # $cell_ref = 'A1'; $caption = " \tWorksheet: _write_dimension('$cell_ref')"; $expected = qq(); $worksheet = _new_worksheet(\$got); $worksheet->write( $cell_ref, 'some string' ); $worksheet->_write_dimension(); is( $got, $expected, $caption ); ############################################################################### # # 7. Test the _write_dimension() method with dimensions set. # $cell_ref = 'A1:B2'; $caption = " \tWorksheet: _write_dimension('$cell_ref')"; $expected = qq(); $worksheet = _new_worksheet(\$got); $worksheet->write( 'A1', 'some string' ); $worksheet->write( 'B2', 'some string' ); $worksheet->_write_dimension(); is( $got, $expected, $caption ); ############################################################################### # # 8. Test the _write_dimension() method with dimensions set. # $cell_ref = 'A1:B2'; $caption = " \tWorksheet: _write_dimension('$cell_ref')"; $expected = qq(); $worksheet = _new_worksheet(\$got); $worksheet->write( 'B2', 'some string' ); $worksheet->write( 'A1', 'some string' ); $worksheet->_write_dimension(); is( $got, $expected, $caption ); ############################################################################### # # 9. Test the _write_dimension() method with dimensions set. # $cell_ref = 'B2:H11'; $caption = " \tWorksheet: _write_dimension('$cell_ref')"; $expected = qq(); $worksheet = _new_worksheet(\$got); $worksheet->write( 'B2', 'some string' ); $worksheet->write( 'H11', 'some string' ); $worksheet->_write_dimension(); is( $got, $expected, $caption ); ############################################################################### # # 10. Test the _write_dimension() method with dimensions set. # $cell_ref = 'A1:XFD1048576'; $caption = " \tWorksheet: _write_dimension('$cell_ref')"; $expected = qq(); $worksheet = _new_worksheet(\$got); $worksheet->write( 'A1', 'some string' ); $worksheet->write( 'XFD1048576', 'some string' ); $worksheet->_write_dimension(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sub_write_selection.t0000644000076500000240000000156315061072563022054 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_selection() method. # $caption = " \tWorksheet: _write_selection()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_selection( undef, 'A1', 'A1' ); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sparkline_08.t0000644000076500000240000001264115061072563020302 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_excel_version} = 2010; $worksheet->{_name} = 'Sheet1'; $worksheet->{_palette}->[2] = [ 0xff, 0x00, 0x00, 0x00 ]; $worksheet->select(); my $data = [ -2, 2, 3, -1, 0 ]; $worksheet->write('A1', $data); $worksheet->write('A2', $data); $worksheet->write('A3', $data); # Set up sparklines $worksheet->add_sparkline( { location => 'F1', range => 'A1:E1', style => 1, } ); $worksheet->add_sparkline( { location => 'F2', range => 'A2:E2', style => 2, } ); $worksheet->add_sparkline( { location => 'F3', range => 'A3:E3', series_color => '#FF0000', } ); # End sparklines $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ -2 2 3 -1 0 -2 2 3 -1 0 -2 2 3 -1 0 Sheet1!A3:E3 F3 Sheet1!A2:E2 F2 Sheet1!A1:E1 F1 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_views6.t0000644000076500000240000000656015061072563022504 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 4; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Freeze panes with selection. # ############################################################################### # # 1. Test the _write_sheet_views() method with freeze panes + selection. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'A2' ); $worksheet->freeze_panes( 1, 0 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_sheet_views() method with freeze panes + selection. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'B1' ); $worksheet->freeze_panes( 0, 1 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_sheet_views() method with freeze panes + selection. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'G4' ); $worksheet->freeze_panes( 'G4' ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_sheet_views() method with freeze panes + selection. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'I5' ); $worksheet->freeze_panes( 'G4' ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sparkline_02.t0000644000076500000240000000617315061072563020277 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_excel_version} = 2010; $worksheet->{_name} = 'Sheet1'; $worksheet->select(); my $data = [ -2, 2, 3, -1, 0 ]; $worksheet->write('A1', $data); # Set up sparklines $worksheet->add_sparkline( { location => 'F1', range => 'Sheet1!A1:E1', } ); # End sparkline $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ -2 2 3 -1 0 Sheet1!A1:E1 F1 Excel-Writer-XLSX-1.15/t/worksheet/sub_convert_date_time_01.t0000644000076500000240000005544715061072563022662 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet date and time handling. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 100; my $got; my $date_time; my $number; my $result; my $worksheet = _new_worksheet( \$got ); $worksheet->{_date_1904} = 0; # Set float difference limit to half of an Excel millisecond my $flt_delta = 0.5 / ( 24 * 60 * 60 * 1000 ); ############################################################################## # # Float comparison function. # sub flt_cmp { return abs( $_[0] - $_[1] ) < $flt_delta; } ############################################################################## # # Test the flt_cmp() function used in the other tests. # $date_time = '1899-12-31T00:00:00.0004'; $number = 0; $result = $worksheet->convert_date_time( $date_time ); $result = -1 unless defined $result; # Test 1. This should pass. It is less than the float diff limit. ok( flt_cmp( $number, $result ), " Testing convert_date_time: $date_time $number" ); $date_time = '1899-12-31T00:00:00.0005'; $number = 0; $result = $worksheet->convert_date_time( $date_time ); $result = -1 unless defined $result; # Test 2. This should fail. It is equal to the float diff limit. my $diff = !flt_cmp( $number, $result ); ok( $diff, " Testing convert_date_time: $date_time $number" ); ############################################################################## # # Test the time data generated in Excel. # while ( ) { last if /^# stop/; # For debugging next unless /\S/; # Ignore blank lines next if /^#/; # Ignore comments if ( /"DateTime">([^<]+)/ ) { my $date_time = $1; my $line = ; if ( $line =~ /"Number">([^<]+)/ ) { my $number = 0 + $1; my $result = $worksheet->convert_date_time( $date_time ); $result = -1 unless defined $result; ok( flt_cmp( $number, $result ), " Testing convert_date_time: $date_time $number" ) or diag( "difference between $number and $result\n" . "= " . abs( $number - $result ) . "\n" . "> $flt_delta" ); } } } __DATA__ # Test data taken from Excel in XML format. 1899-12-31T00:00:00.000 0 1982-08-25T00:15:20.213 30188.010650613425 2065-04-19T00:16:48.290 60376.011670023145 2147-12-15T00:55:25.446 90565.038488958337 2230-08-10T01:02:46.891 120753.04359827546 2313-04-06T01:04:15.597 150942.04462496529 2395-11-30T01:09:40.889 181130.04838991899 2478-07-25T01:11:32.560 211318.04968240741 2561-03-21T01:30:19.169 241507.06272186342 2643-11-15T01:48:25.580 271695.07529606484 2726-07-12T02:03:31.919 301884.08578609955 2809-03-06T02:11:11.986 332072.09111094906 2891-10-31T02:24:37.095 362261.10042934027 2974-06-26T02:35:07.220 392449.10772245371 3057-02-19T02:45:12.109 422637.1147234838 3139-10-17T03:06:39.990 452826.12962951389 3222-06-11T03:08:08.251 483014.13065105322 3305-02-05T03:19:12.576 513203.13834 3387-10-01T03:29:42.574 543391.14563164348 3470-05-27T03:37:30.813 573579.15105107636 3553-01-21T04:14:38.231 603768.17683137732 3635-09-16T04:16:28.559 633956.17810832174 3718-05-13T04:17:58.222 664145.17914608796 3801-01-06T04:21:41.794 694333.18173372687 3883-09-02T04:56:35.792 724522.20596981479 3966-04-28T05:25:14.885 754710.2258667245 4048-12-21T05:26:05.724 784898.22645513888 4131-08-18T05:46:44.068 815087.24078782403 4214-04-13T05:48:01.141 845275.24167987274 4296-12-07T05:53:52.315 875464.24574438657 4379-08-03T06:14:48.580 905652.26028449077 4462-03-28T06:46:15.738 935840.28212659725 4544-11-22T07:31:20.407 966029.31343063654 4627-07-19T07:58:33.754 996217.33233511576 4710-03-15T08:07:43.130 1026406.3386936343 4792-11-07T08:29:11.091 1056594.3536005903 4875-07-04T09:08:15.328 1086783.3807329629 4958-02-27T09:30:41.781 1116971.3963169097 5040-10-23T09:34:04.462 1147159.3986627546 5123-06-20T09:37:23.945 1177348.4009715857 5206-02-12T09:37:56.655 1207536.4013501736 5288-10-08T09:45:12.230 1237725.406391551 5371-06-04T09:54:14.782 1267913.412671088 5454-01-28T09:54:22.108 1298101.4127558796 5536-09-24T10:01:36.151 1328290.4177795255 5619-05-20T12:09:48.602 1358478.5068125231 5702-01-14T12:34:08.549 1388667.5237100578 5784-09-08T12:56:06.495 1418855.5389640625 5867-05-06T12:58:58.217 1449044.5409515856 5949-12-30T12:59:54.263 1479232.5416002662 6032-08-24T13:34:41.331 1509420.5657561459 6115-04-21T13:58:28.601 1539609.5822754744 6197-12-14T14:02:16.899 1569797.5849178126 6280-08-10T14:36:17.444 1599986.6085352316 6363-04-06T14:37:57.451 1630174.60969272 6445-11-30T14:57:42.757 1660363.6234115392 6528-07-26T15:10:48.307 1690551.6325035533 6611-03-22T15:14:39.890 1720739.635183912 6693-11-15T15:19:47.988 1750928.6387498612 6776-07-11T16:04:24.344 1781116.6697262037 6859-03-07T16:22:23.952 1811305.6822216667 6941-10-31T16:29:55.999 1841493.6874536921 7024-06-26T16:58:20.259 1871681.7071789235 7107-02-21T17:04:02.415 1901870.7111390624 7189-10-16T17:18:29.630 1932058.7211762732 7272-06-11T17:47:21.323 1962247.7412190163 7355-02-05T17:53:29.866 1992435.7454845603 7437-10-02T17:53:41.076 2022624.7456143056 7520-05-28T17:55:06.044 2052812.7465977315 7603-01-21T18:14:49.151 2083000.7602910995 7685-09-16T18:17:45.738 2113189.7623349307 7768-05-12T18:29:59.700 2143377.7708298611 7851-01-07T18:33:21.233 2173566.773162419 7933-09-02T19:14:24.673 2203754.8016744559 8016-04-27T19:17:12.816 2233942.8036205554 8098-12-22T19:23:36.418 2264131.8080603937 8181-08-17T19:46:25.908 2294319.8239109721 8264-04-13T20:07:47.314 2324508.8387420601 8346-12-08T20:31:37.603 2354696.855296331 8429-08-03T20:39:57.770 2384885.8610853008 8512-03-29T20:50:17.067 2415073.8682530904 8594-11-22T21:02:57.827 2445261.8770581828 8677-07-19T21:23:05.519 2475450.8910360998 8760-03-14T21:34:49.572 2505638.8991848612 8842-11-08T21:39:05.944 2535827.9021521294 8925-07-04T21:39:18.426 2566015.9022965971 9008-02-28T21:46:07.769 2596203.9070343636 9090-10-24T21:57:55.662 2626392.9152275696 9173-06-19T22:19:11.732 2656580.9299968979 9256-02-13T22:23:51.376 2686769.9332335186 9338-10-09T22:27:58.771 2716957.9360968866 9421-06-05T22:43:30.392 2747146.9468795368 9504-01-30T22:48:25.834 2777334.9502990046 9586-09-24T22:53:51.727 2807522.9540709145 9669-05-20T23:12:56.536 2837711.9673210187 9752-01-14T23:15:54.109 2867899.9693762613 9834-09-10T23:17:12.632 2898088.9702850925 9999-12-31T23:59:59.000 2958465.999988426 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_views2.t0000644000076500000240000000736315061072563022502 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 5; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Freeze panes. # ############################################################################### # # 1. Test the _write_sheet_views() method with freeze panes. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->freeze_panes( 1 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_sheet_views() method with freeze panes. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->freeze_panes( 0, 1 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_sheet_views() method with freeze panes. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->freeze_panes( 1, 1 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_sheet_views() method with freeze panes. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->freeze_panes( 'G4' ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 5. Test the _write_sheet_views() method with freeze panes. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->freeze_panes( 3, 6, 3, 6, 1 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/sparkline_06.t0000644000076500000240000000712615061072563020302 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_excel_version} = 2010; $worksheet->{_name} = 'Sheet1'; $worksheet->select(); my $data = [ -2, 2, 3, -1, 0 ]; $worksheet->write('A1', $data); $worksheet->write('A2', $data); # Set up sparklines $worksheet->add_sparkline( { location => [ 'F1', 'F2' ], range => [ 'A1:E1', 'A2:E2' ], } ); # End sparkline $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ -2 2 3 -1 0 -2 2 3 -1 0 Sheet1!A1:E1 F1 Sheet1!A2:E2 F2 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_views8.t0000644000076500000240000000651215061072563022503 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 4; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Split panes with selection. # ############################################################################### # # 1. Test the _write_sheet_views() method with split panes + selection. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'A2' ); $worksheet->split_panes( 15, 0 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_sheet_views() method with split panes + selection. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'B1' ); $worksheet->split_panes( 0, 8.43 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_sheet_views() method with split panes + selection. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'G4' ); $worksheet->split_panes( 45, 54.14 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_sheet_views() method with split panes + selection. # $caption = " \tWorksheet: _write_sheet_views()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->set_selection( 'I5' ); $worksheet->split_panes( 45, 54.14 ); $worksheet->_write_sheet_views(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_data_bar_05.t0000644000076500000240000001355715061072563022146 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->{_index} = 0; $worksheet->conditional_formatting( 'A1', { type => 'data_bar', bar_direction => 'left' } ); $worksheet->conditional_formatting( 'A2:B2', { type => 'data_bar', bar_color => '#63C384', bar_direction => 'right' } ); $worksheet->conditional_formatting( 'A3:C3', { type => 'data_bar', bar_color => '#FF555A', bar_negative_color => '#FFFF00', } ); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ {DA7ABA51-AAAA-BBBB-0001-000000000001} {DA7ABA51-AAAA-BBBB-0001-000000000002} {DA7ABA51-AAAA-BBBB-0001-000000000003} A1 A2:B2 A3:C3 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_sheet_view.t0000644000076500000240000000673715061072563022241 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 7; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _write_sheet_view() method. Tab not selected. # $caption = " \tWorksheet: _write_sheet_view()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->_write_sheet_view(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_sheet_view() method. Tab selected. # $caption = " \tWorksheet: _write_sheet_view()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->_write_sheet_view(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_sheet_view() method. Tab selected + hide_gridlines(). # $caption = " \tWorksheet: _write_sheet_view() + hide_gridlines()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->hide_gridlines(); $worksheet->_write_sheet_view(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_sheet_view() method. Tab selected + hide_gridlines(). # $caption = " \tWorksheet: _write_sheet_view() + hide_gridlines(0)"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->hide_gridlines( 0 ); $worksheet->_write_sheet_view(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_sheet_view() method. Tab selected + hide_gridlines(). # $caption = " \tWorksheet: _write_sheet_view() + hide_gridlines(1)"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->hide_gridlines( 1 ); $worksheet->_write_sheet_view(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_sheet_view() method. Tab selected + hide_gridlines(). # $caption = " \tWorksheet: _write_sheet_view() + hide_gridlines(2)"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->hide_gridlines( 2 ); $worksheet->_write_sheet_view(); is( $got, $expected, $caption ); ############################################################################### # # Test the _write_sheet_view() method. Tab selected + hide_row_col_headings(). # $caption = " \tWorksheet: _write_sheet_view() + hide_row_col_headings()"; $expected = ''; $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->hide_row_col_headers(); $worksheet->_write_sheet_view(); is( $got, $expected, $caption ); __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_merge_cells_01.t0000644000076500000240000000340115061072563022651 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test merged cells. # $caption = " \tWorksheet: _assemble_xml_file()"; my $format = Excel::Writer::XLSX::Format->new( {}, {}, xf_index => 1 ); $worksheet = _new_worksheet(\$got); $worksheet->select(); $worksheet->merge_range( 'B3:C3', 'Foo', $format); $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 0 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_10.t0000644000076500000240000000451515061072563022672 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->{_date_1904} = 0; $worksheet->select(); # Start test code. $worksheet->write( 'A1', 10 ); $worksheet->write( 'A2', 20 ); $worksheet->write( 'A3', 30 ); $worksheet->write( 'A4', 40 ); $worksheet->conditional_formatting( 'A1:A4', { type => 'date', criteria => 'greater than', value => '2011-01-01T', format => undef, } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 10 20 30 40 40544 Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_24.t0000644000076500000240000001757315061072563022707 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); # Start test code. $worksheet->write( 'A1', 1 ); $worksheet->write( 'A2', 2 ); $worksheet->write( 'A3', 3 ); $worksheet->write( 'A4', 4 ); $worksheet->write( 'A5', 5 ); $worksheet->write( 'A6', 6 ); $worksheet->write( 'A7', 7 ); $worksheet->write( 'A8', 8 ); $worksheet->write( 'A9', 9 ); $worksheet->write( 'A12', 75 ); $worksheet->conditional_formatting( 'A1', { type => 'icon_set', icon_style => '3_arrows', reverse_icons => 1, } ); $worksheet->conditional_formatting( 'A2', { type => 'icon_set', icon_style => '3_flags', icons_only => 1, } ); $worksheet->conditional_formatting( 'A3', { type => 'icon_set', icon_style => '3_traffic_lights_rimmed', icons_only => 1, reverse_icons => 1, } ); $worksheet->conditional_formatting( 'A4', { type => 'icon_set', icon_style => '3_symbols_circled', icons => [ {value => 80}, {value => 20}, ], } ); $worksheet->conditional_formatting( 'A5', { type => 'icon_set', icon_style => '4_arrows', icons => [ {criteria => '>'}, {criteria => '>'}, {criteria => '>'}, ], } ); $worksheet->conditional_formatting( 'A6', { type => 'icon_set', icon_style => '4_red_to_black', icons => [ {criteria => '>=', type => 'number', value => 90}, {criteria => '<', type => 'percentile', value => 50}, {criteria => '<=', type => 'percent', value => 25}, ], } ); $worksheet->conditional_formatting( 'A7', { type => 'icon_set', icon_style => '4_traffic_lights', icons => [ {value => '=$A$12'} ], } ); $worksheet->conditional_formatting( 'A8', { type => 'icon_set', icon_style => '5_arrows_gray', icons => [ {type => 'formula', value => '=$A$12'} ], } ); $worksheet->conditional_formatting( 'A9', { type => 'icon_set', icon_style => '5_quarters', icons => [ { type => 'percentile', value => 70 }, { type => 'percentile', value => 50 }, { type => 'percentile', value => 30 }, { type => 'percentile', value => 10 }, { type => 'percentile', value => -1 }, ], reverse_icons => 1, } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 1 2 3 4 5 6 7 8 9 75 Excel-Writer-XLSX-1.15/t/worksheet/sub_extract_filter_tokens.t0000644000076500000240000000462115061072563023255 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Tests for the token extraction method used to parse autofilter expressions. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_new_worksheet _is_deep_diff); use strict; use warnings; use Test::More tests => 18; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet = _new_worksheet( \$got ); ############################################################################### # # Test cases structured as [$input, [@expected_output]] # my @tests = ( [ undef, [], ], [ '', [], ], [ '0 < 2000', [0, '<', 2000], ], [ 'x < 2000', ['x', '<', 2000], ], [ 'x > 2000', ['x', '>', 2000], ], [ 'x == 2000', ['x', '==', 2000], ], [ 'x > 2000 and x < 5000', ['x', '>', 2000, 'and', 'x', '<', 5000], ], [ 'x = "foo"', ['x', '=', 'foo'], ], [ 'x = foo', ['x', '=', 'foo'], ], [ 'x = "foo bar"', ['x', '=', 'foo bar'], ], [ 'x = "foo "" bar"', ['x', '=', 'foo " bar'], ], [ 'x = "foo bar" or x = "bar foo"', ['x', '=', 'foo bar', 'or', 'x', '=', 'bar foo'], ], [ 'x = "foo "" bar" or x = "bar "" foo"', ['x', '=', 'foo " bar', 'or', 'x', '=', 'bar " foo'], ], [ 'x = """"""""', ['x', '=', '"""'], ], [ 'x = Blanks', ['x', '=', 'Blanks'], ], [ 'x = NonBlanks', ['x', '=', 'NonBlanks'], ], [ 'top 10 %', ['top', 10, '%'], ], [ 'top 10 items', ['top', 10, 'items'], ], ); ############################################################################### # # Run the test cases. # for my $aref ( @tests ) { my $expression = $aref->[0]; my $expected = $aref->[1]; my @results = $worksheet->_extract_filter_tokens( $expression ); my $testname = $expression || 'none'; _is_deep_diff( \@results, $expected, " \t" . $testname ); } __END__ Excel-Writer-XLSX-1.15/t/worksheet/worksheet_cond_format_01.t0000644000076500000240000000443015061072563022666 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions qw(_expected_to_aref _got_to_aref _is_deep_diff _new_worksheet); use strict; use warnings; use Test::More tests => 1; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; ############################################################################### # # Test the _assemble_xml_file() method. # # Test conditional formats. # $caption = " \tWorksheet: _assemble_xml_file()"; $worksheet = _new_worksheet(\$got); $worksheet->select(); # Start test code. $worksheet->write( 'A1', 10 ); $worksheet->write( 'A2', 20 ); $worksheet->write( 'A3', 30 ); $worksheet->write( 'A4', 40 ); $worksheet->conditional_formatting( 'A1', { type => 'cell', format => undef, criteria => 'greater than', value => 5, } ); # End test code. $worksheet->_assemble_xml_file(); $expected = _expected_to_aref(); $got = _got_to_aref( $got ); _is_deep_diff( $got, $expected, $caption ); __DATA__ 10 20 30 40 5 Excel-Writer-XLSX-1.15/t/worksheet/sub_write_row.t0000644000076500000240000000627015061072563020676 0ustar Johnstaff############################################################################### # # Tests for Excel::Writer::XLSX::Worksheet methods. # # Copyright 2000-2025, John McNamara, jmcnamara@cpan.org # # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later # use lib 't/lib'; use TestFunctions '_new_worksheet'; use strict; use warnings; use Test::More tests => 8; ############################################################################### # # Tests setup. # my $expected; my $got; my $caption; my $worksheet; my $format = Excel::Writer::XLSX::Format->new( {}, {}, xf_index => 1 ); ############################################################################### # # 1. Test the _write_row() method. # $caption = " \tWorksheet: _write_row()"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_row( 0 ); is( $got, $expected, $caption ); ############################################################################### # # 2. Test the _write_row() method. # $caption = " \tWorksheet: _write_row()"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_row( 2, '2:2' ); is( $got, $expected, $caption ); ############################################################################### # # 3. Test the _write_row() method. # $caption = " \tWorksheet: _write_row()"; $expected = ''; $worksheet = _new_worksheet( \$got ); $worksheet->_write_row( 1, undef, 30 ); is( $got, $expected, $caption ); ############################################################################### # # 4. Test the _write_row() method. # $caption = " \tWorksheet: _write_row()"; $expected = '