Skip to content

Commit 1d86840

Browse files
authored
Merge pull request #2103 from oleibman/csvdflts
CSV Reader Enhancements
2 parents 05d3b93 + d21d943 commit 1d86840

File tree

9 files changed

+378
-341
lines changed

9 files changed

+378
-341
lines changed

docs/topics/reading-and-writing-to-file.md

+35
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,41 @@ $reader->setSheetIndex(0);
480480
$spreadsheet = $reader->load('sample.csv');
481481
```
482482

483+
You can also set the reader to guess the encoding
484+
rather than calling guessEncoding directly. In this case,
485+
the user-settable fallback encoding is used if nothing else works.
486+
487+
```php
488+
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
489+
$reader->setInputEncoding(\PhpOffice\PhpSpreadsheet\Reader\Csv::GUESS_ENCODING);
490+
$reader->setFallbackEncoding('ISO-8859-2'); // default CP1252 without this statement
491+
$reader->setDelimiter(';');
492+
$reader->setEnclosure('');
493+
$reader->setSheetIndex(0);
494+
495+
$spreadsheet = $reader->load('sample.csv');
496+
```
497+
498+
Finally, you can set a callback to be invoked when the constructor is executed,
499+
either through `new Csv()` or `IOFactory::load`,
500+
and have that callback set the customizable attributes to whatever
501+
defaults are appropriate for your environment.
502+
503+
```php
504+
function constructorCallback(\PhpOffice\PhpSpreadsheet\Reader\Csv $reader): void
505+
{
506+
$reader->setInputEncoding(\PhpOffice\PhpSpreadsheet\Reader\Csv::GUESS_ENCODING);
507+
$reader->setFallbackEncoding('ISO-8859-2');
508+
$reader->setDelimiter(',');
509+
$reader->setEnclosure('"');
510+
// Following represents how Excel behaves better than the default escape character
511+
$reader->setEscapeCharacter((version_compare(PHP_VERSION, '7.4') < 0) ? "\x0" : '');
512+
}
513+
514+
\PhpOffice\PhpSpreadsheet\Reader\Csv::setConstructorCallback('constructorCallback');
515+
$spreadsheet = \PhpSpreadsheet\IOFactory::load('sample.csv');
516+
```
517+
483518
#### Read a specific worksheet
484519

485520
CSV files can only contain one worksheet. Therefore, you can specify

phpstan-baseline.neon

-130
Original file line numberDiff line numberDiff line change
@@ -2395,101 +2395,6 @@ parameters:
23952395
count: 1
23962396
path: src/PhpSpreadsheet/Reader/BaseReader.php
23972397

2398-
-
2399-
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\:\\:\\$delimiter \\(string\\) does not accept string\\|null\\.$#"
2400-
count: 1
2401-
path: src/PhpSpreadsheet/Reader/Csv.php
2402-
2403-
-
2404-
message: "#^Parameter \\#1 \\$var of function count expects array\\|Countable, array\\|null given\\.$#"
2405-
count: 1
2406-
path: src/PhpSpreadsheet/Reader/Csv.php
2407-
2408-
-
2409-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\:\\:openFileOrMemory\\(\\) has parameter \\$pFilename with no typehint specified\\.$#"
2410-
count: 1
2411-
path: src/PhpSpreadsheet/Reader/Csv.php
2412-
2413-
-
2414-
message: "#^Parameter \\#1 \\$value of static method PhpOffice\\\\PhpSpreadsheet\\\\Shared\\\\StringHelper\\:\\:convertEncoding\\(\\) expects string, string\\|false given\\.$#"
2415-
count: 1
2416-
path: src/PhpSpreadsheet/Reader/Csv.php
2417-
2418-
-
2419-
message: "#^Parameter \\#1 \\$fp of function fwrite expects resource, resource\\|false given\\.$#"
2420-
count: 1
2421-
path: src/PhpSpreadsheet/Reader/Csv.php
2422-
2423-
-
2424-
message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#"
2425-
count: 1
2426-
path: src/PhpSpreadsheet/Reader/Csv.php
2427-
2428-
-
2429-
message: "#^Parameter \\#2 \\$newvalue of function ini_set expects string, string\\|false given\\.$#"
2430-
count: 1
2431-
path: src/PhpSpreadsheet/Reader/Csv.php
2432-
2433-
-
2434-
message: "#^Call to function is_array\\(\\) with string will always evaluate to false\\.$#"
2435-
count: 1
2436-
path: src/PhpSpreadsheet/Reader/Csv.php
2437-
2438-
-
2439-
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:\\$fileHandle has no typehint specified\\.$#"
2440-
count: 1
2441-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2442-
2443-
-
2444-
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:\\$escapeCharacter has no typehint specified\\.$#"
2445-
count: 1
2446-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2447-
2448-
-
2449-
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:\\$enclosure has no typehint specified\\.$#"
2450-
count: 1
2451-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2452-
2453-
-
2454-
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:\\$counts has no typehint specified\\.$#"
2455-
count: 1
2456-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2457-
2458-
-
2459-
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:\\$numberLines has no typehint specified\\.$#"
2460-
count: 1
2461-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2462-
2463-
-
2464-
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:\\$delimiter has no typehint specified\\.$#"
2465-
count: 1
2466-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2467-
2468-
-
2469-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:__construct\\(\\) has parameter \\$enclosure with no typehint specified\\.$#"
2470-
count: 1
2471-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2472-
2473-
-
2474-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:__construct\\(\\) has parameter \\$escapeCharacter with no typehint specified\\.$#"
2475-
count: 1
2476-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2477-
2478-
-
2479-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:__construct\\(\\) has parameter \\$fileHandle with no typehint specified\\.$#"
2480-
count: 1
2481-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2482-
2483-
-
2484-
message: "#^Parameter \\#2 \\$subject of function preg_match expects string, string\\|null given\\.$#"
2485-
count: 1
2486-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2487-
2488-
-
2489-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Csv\\\\Delimiter\\:\\:getNextLine\\(\\) should return string\\|false but returns string\\|null\\.$#"
2490-
count: 1
2491-
path: src/PhpSpreadsheet/Reader/Csv/Delimiter.php
2492-
24932398
-
24942399
message: "#^Property PhpOffice\\\\PhpSpreadsheet\\\\Reader\\\\Html\\:\\:\\$rowspan has no typehint specified\\.$#"
24952400
count: 1
@@ -7535,41 +7440,6 @@ parameters:
75357440
count: 5
75367441
path: tests/PhpSpreadsheetTests/NamedRangeTest.php
75377442

7538-
-
7539-
message: "#^Method PhpOffice\\\\PhpSpreadsheetTests\\\\Reader\\\\CsvContiguousFilter\\:\\:setFilterType\\(\\) has parameter \\$type with no typehint specified\\.$#"
7540-
count: 1
7541-
path: tests/PhpSpreadsheetTests/Reader/CsvContiguousFilter.php
7542-
7543-
-
7544-
message: "#^Method PhpOffice\\\\PhpSpreadsheetTests\\\\Reader\\\\CsvContiguousFilter\\:\\:filter1\\(\\) has no return typehint specified\\.$#"
7545-
count: 1
7546-
path: tests/PhpSpreadsheetTests/Reader/CsvContiguousFilter.php
7547-
7548-
-
7549-
message: "#^Method PhpOffice\\\\PhpSpreadsheetTests\\\\Reader\\\\CsvContiguousFilter\\:\\:filter1\\(\\) has parameter \\$row with no typehint specified\\.$#"
7550-
count: 1
7551-
path: tests/PhpSpreadsheetTests/Reader/CsvContiguousFilter.php
7552-
7553-
-
7554-
message: "#^Method PhpOffice\\\\PhpSpreadsheetTests\\\\Reader\\\\CsvContiguousFilter\\:\\:filter0\\(\\) has no return typehint specified\\.$#"
7555-
count: 1
7556-
path: tests/PhpSpreadsheetTests/Reader/CsvContiguousFilter.php
7557-
7558-
-
7559-
message: "#^Method PhpOffice\\\\PhpSpreadsheetTests\\\\Reader\\\\CsvContiguousFilter\\:\\:filter0\\(\\) has parameter \\$row with no typehint specified\\.$#"
7560-
count: 1
7561-
path: tests/PhpSpreadsheetTests/Reader/CsvContiguousFilter.php
7562-
7563-
-
7564-
message: "#^Cannot call method getCell\\(\\) on PhpOffice\\\\PhpSpreadsheet\\\\Worksheet\\\\Worksheet\\|null\\.$#"
7565-
count: 3
7566-
path: tests/PhpSpreadsheetTests/Reader/CsvContiguousTest.php
7567-
7568-
-
7569-
message: "#^Call to static method PHPUnit\\\\Framework\\\\Assert\\:\\:assertNull\\(\\) with string will always evaluate to false\\.$#"
7570-
count: 1
7571-
path: tests/PhpSpreadsheetTests/Reader/CsvTest.php
7572-
75737443
-
75747444
message: "#^Unreachable statement \\- code above always terminates\\.$#"
75757445
count: 1

0 commit comments

Comments
 (0)