В статье представлены различные PHP-расширения для чтения файлов XLS, XLSX, описаны их плюсы и минусы, а также примеры чтения.
1
PHPExcel
https://github.com/PHPOffice/PHPExcel
Огромная библиотека читает и формирует фалы xls, xlsx, csv.
- Для файлов xlsx потребует расширение ZipArchive.
- Потребляет много памяти.
Пример чтения файла в массив:
require_once __DIR__ . '/PHPExcel-1.8/Classes/PHPExcel/IOFactory.php';
// Файл xlsx
$xls = PHPExcel_IOFactory::load(__DIR__ . '/test.xlsx');
// Первый лист
$xls->setActiveSheetIndex(0);
$sheet = $xls->getActiveSheet();
foreach ($sheet->toArray() as $row) {
print_r($row);
}
PHP
2
SimpleXLSX
https://www.phpclasses.org/package/6279-PHP-Parse-and-retrieve-data-from-Excel-XLS-files.html
simple-xlsx.zip (2017-09-25)
Читает только файлы xlsx.
- Менее прожорлив к памяти.
- Не всегда может прочитать файл, например файл сформированный PHPExcel.
require_once __DIR__ . '/simple-xlsx/simplexlsx.class.php';
// Файл xlsx
$xlsx = new SimpleXLSX(__DIR__ . '/test.xlsx');
// Первый лист
$sheet = $xlsx->rows(1);
foreach ($sheet as $row) {
print_r($row);
}
PHP
3
PHP-ExcelReader
https://sourceforge.net/projects/phpexcelreader/
phpExcelReader.zip (исправленный)
- Прочтёт только XLS файлы.
- Есть проблемы с кодировкой.
require_once __DIR__ . '/phpExcelReader/Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('UTF-8');
// Файл xls
$data->read(__DIR__ . '/test.xls');
// Первый лист
$sheet = $data->sheets[0]['cells'];
foreach ($sheet as $row) {
print_r($row);
}
PHP
4
PHP-Excel-Reader
https://code.google.com/archive/p/php-excel-reader/
php-excel-reader.zip (2.21)
Форк библиотеки «PHP Excel Reader» с SourceForge предназначенный для вывода таблицы в HTML.
Например файл example.xls выведет следующим образом:
<style>
table.excel {
border: 1px solid #CCCCCC;
border-collapse:collapse;
font-family:sans-serif;
font-size:12px;
margin: 0 auto;
}
table.excel thead th, table.excel tbody th {
border: 1px solid #CCCCCC;
text-align: center;
vertical-align:bottom;
}
table.excel tbody th {
text-align:center;
width:20px;
}
table.excel tbody td {
vertical-align:bottom;
}
table.excel tbody td {
padding: 0 3px;
border: 1px solid #EEEEEE;
}
</style>
<?php
require_once __DIR__ . '/php-excel-reader/excel_reader2.php';
$data = new Spreadsheet_Excel_Reader(__DIR__ . '/example.xls');
echo $data->dump(true, true);
?>
HTML
Также у библиотеки есть методы для получения формата и содержания каждой ячейки по отдельности.
5
Nuovo Spreadsheet-Reader
https://github.com/nuovo/spreadsheet-reader
spreadsheet-reader.zip
Читает файлы XLSX, XLS, CSV и OpenOffice ods. Для чтения XLS используется предыдущая библиотека php-excel-reader.
require_once __DIR__ . '/spreadsheet-reader/php-excel-reader/excel_reader2.php';
require_once __DIR__ . '/spreadsheet-reader/SpreadsheetReader.php';
// Файл xlsx, xls, csv, ods.
$Reader = new SpreadsheetReader(__DIR__ . '/test.xlsx');
// Номер листа.
$Reader -> ChangeSheet(0);
foreach ($Reader as $Row) {
print_r($Row);
}
PHP
6
PHP-Spreadsheetreader
https://code.google.com/archive/p/php-spreadsheetreader/
SpreadsheetReader.rar
Откроет только файлы в формате XML Excel 2004.
$file = __DIR__ . '/test.xml';
require_once __DIR__ . '/SpreadsheetReader/SpreadsheetReader.php';
$reader = new SpreadsheetReader;
// Файл xml
$sheets = $reader->read(__DIR__ . '/test.xml');
// Выводим Первый лист
foreach ($sheets[0] as $row) {
print_r($row);
}
PHP
I’m trying to read an Excel file (Office 2003). There is an Excel file that needs to be uploaded and its contents parsed.
Via Google, I can only find answers to these related (and insufficient topics): generating Excel files, reading Excel XML files, reading Excel CSV files, or incomplete abandoned projects. I own Office 2003 so if I need any files from there, they are available. It’s installed on my box but isn’t and can’t be installed on my shared host.
Edit: so far all answers point to PHP-ExcelReader and/or this additional article about how to use it.
Kangel
231 silver badge8 bronze badges
asked Feb 19, 2009 at 1:53
3
You have 2 choices as far as I know:
- Spreadsheet_Excel_Reader, which knows the Office 2003 binary format
- PHPExcel, which knows both Office 2003 as well as Excel 2007 (XML). (Follow the link, and you’ll see they upgraded this library to PHPSpreadSheet)
PHPExcel uses Spreadsheet_Excel_Reader for the Office 2003 format.
Update: I once had to read some Excel files but I used the Office 2003 XML format in order to read them and told the people that were using the application to save and upload only that type of Excel file.
answered Feb 19, 2009 at 1:57
Ionuț G. StanIonuț G. Stan
175k18 gold badges188 silver badges201 bronze badges
3
I use PHP-ExcelReader to read xls files, and works great.
user229044♦
231k40 gold badges331 silver badges336 bronze badges
answered Feb 19, 2009 at 3:07
Luis MelgrattiLuis Melgratti
11.8k3 gold badges30 silver badges32 bronze badges
7
Read XLSX (Excel 2003+)
https://github.com/shuchkin/simplexlsx
if ( $xlsx = SimpleXLSX::parse('book.xlsx') ) {
print_r( $xlsx->rows() );
} else {
echo SimpleXLSX::parseError();
}
Output
Array ( [0] => Array ( [0] => ISBN [1] => title [2] => author [3] => publisher [4] => ctry ) [1] => Array ( [0] => 618260307 [1] => The Hobbit [2] => J. R. R. Tolkien [3] => Houghton Mifflin [4] => USA ) )
Read XLS (Excel 97-2003)
https://github.com/shuchkin/simplexls
if ( $xls = SimpleXLS::parse('book.xls') ) {
print_r( $xls->rows() );
} else {
echo SimpleXLS::parseError();
}
CSV php reader
https://github.com/shuchkin/simplecsv
if ( $csv = SimpleCSV::import('book.csv') ) {
print_r( $csv );
}
answered Dec 28, 2018 at 17:56
1
It depends on how you want to use the data in the excel file. If you want to import it into mysql, you could simply save it as a CSV formatted file and then use fgetcsv to parse it.
Larry K
47.2k14 gold badges86 silver badges138 bronze badges
answered Apr 21, 2013 at 21:09
JimboJimbo
4914 silver badges5 bronze badges
// Here is the simple code using COM object in PHP
class Excel_ReadWrite{
private $XLSHandle;
private $WrkBksHandle;
private $xlBook;
function __construct() {
$this->XLSHandle = new COM("excel.application") or die("ERROR: Unable to instantaniate COM!rn");
}
function __destruct(){
//if already existing file is opened
if($this->WrkBksHandle != null)
{
$this->WrkBksHandle->Close(True);
unset($this->WrkBksHandle);
$this->XLSHandle->Workbooks->Close();
}
//if created new xls file
if($this->xlBook != null)
{
$this->xlBook->Close(True);
unset($this->xlBook);
}
//Quit Excel Application
$this->XLSHandle->Quit();
unset($this->XLSHandle);
}
public function OpenFile($FilePath)
{
$this->WrkBksHandle = $this->XLSHandle->Workbooks->Open($FilePath);
}
public function ReadData($RowNo, $ClmNo)
{
$Value = $this->XLSHandle->ActiveSheet->Cells($RowNo, $ClmNo)->Value;
return $Value;
}
public function SaveOpenedFile()
{
$this->WrkBksHandle->Save();
}
/***********************************************************************************
* Function Name:- WriteToXlsFile() will write data based on row and column numbers
* @Param:- $CellData- cell data
* @Param:- $RowNumber- xlsx file row number
* @Param:- $ColumnNumber- xlsx file column numbers
************************************************************************************/
function WriteToXlsFile($CellData, $RowNumber, $ColumnNumber)
{
try{
$this->XLSHandle->ActiveSheet->Cells($RowNumber,$ColumnNumber)->Value = $CellData;
}
catch(Exception $e){
throw new Exception("Error:- Unable to write data to xlsx sheet");
}
}
/****************************************************************************************
* Function Name:- CreateXlsFileWithClmName() will initialize xls file with column Names
* @Param:- $XlsColumnNames- Array of columns data
* @Param:- $XlsColumnWidth- Array of columns width
*******************************************************************************************/
function CreateXlsFileWithClmNameAndWidth($WorkSheetName = "Raman", $XlsColumnNames = null, $XlsColumnWidth = null)
{
//Hide MS Excel application window
$this->XLSHandle->Visible = 0;
//Create new document
$this->xlBook = $this->XLSHandle->Workbooks->Add();
//Create Sheet 1
$this->xlBook->Worksheets(1)->Name = $WorkSheetName;
$this->xlBook->Worksheets(1)->Select;
if($XlsColumnWidth != null)
{
//$XlsColumnWidth = array("A1"=>15,"B1"=>20);
foreach($XlsColumnWidth as $Clm=>$Width)
{
//Set Columns Width
$this->XLSHandle->ActiveSheet->Range($Clm.":".$Clm)->ColumnWidth = $Width;
}
}
if($XlsColumnNames != null)
{
//$XlsColumnNames = array("FirstColumnName"=>1, "SecondColumnName"=>2);
foreach($XlsColumnNames as $ClmName=>$ClmNumber)
{
// Cells(Row,Column)
$this->XLSHandle->ActiveSheet->Cells(1,$ClmNumber)->Value = $ClmName;
$this->XLSHandle->ActiveSheet->Cells(1,$ClmNumber)->Font->Bold = True;
$this->XLSHandle->ActiveSheet->Cells(1,$ClmNumber)->Interior->ColorIndex = "15";
}
}
}
//56 is for xls 8
public function SaveCreatedFile($FileName, $FileFormat = 56)
{
$this->xlBook->SaveAs($FileName, $FileFormat);
}
public function MakeFileVisible()
{
//Hide MS Excel application window`enter code here`
$this->XLSHandle->Visible = 1;
}
}//end of EXCEL class
answered Sep 30, 2015 at 23:40
VickyVicky
871 silver badge5 bronze badges
1
Try this…
I have used following code to read «xls and xlsx»
<?php
include 'excel_reader.php'; // include the class
$excel = new PhpExcelReader; // creates object instance of the class
$excel->read('excel_file.xls'); // reads and stores the excel file data
// Test to see the excel data stored in $sheets property
echo '<pre>';
var_export($excel->sheets);
echo '</pre>';
or
echo '<pre>';
print_r($excel->sheets);
echo '</pre>';
Reference:http://coursesweb.net/php-mysql/read-excel-file-data-php_pc
answered Jul 4, 2015 at 11:42
2
I’m using below excel file url: https://github.com/inventorbala/Sample-Excel-files/blob/master/sample-excel-files.xlsx
Output:
Array
(
[0] => Array
(
[store_id] => 3716
[employee_uid] => 664368
[opus_id] => zh901j
[item_description] => PRE ATT $75 PNLS 90EXP
[opus_transaction_date] => 2019-10-18
[opus_transaction_num] => X2MBV1DJKSLQW
[opus_invoice_num] => O3716IN3409
[customer_name] => BILL PHILLIPS
[mobile_num] => 4052380136
[opus_amount] => 75
[rq4_amount] => 0
[difference] => -75
[ocomment] => Re-Upload: We need RQ4 transaction for October. If you're unable to provide the October invoice, it will be counted as EPin shortage.
[mark_delete] => 0
[upload_date] => 2019-10-20
)
[1] => Array
(
[store_id] => 2710
[employee_uid] => 75899
[opus_id] => dc288t
[item_description] => PRE ATT $50 PNLS 90EXP
[opus_transaction_date] => 2019-10-18
[opus_transaction_num] => XJ90419JKT9R9
[opus_invoice_num] => M2710IN868
[customer_name] => CALEB MENDEZ
[mobile_num] => 6517672079
[opus_amount] => 50
[rq4_amount] => 0
[difference] => -50
[ocomment] => No Response. Re-Upload
[mark_delete] => 0
[upload_date] => 2019-10-20
)
[2] => Array
(
[store_id] => 0136
[employee_uid] => 70167
[opus_id] => fv766x
[item_description] => PRE ATT $50 PNLS 90EXP
[opus_transaction_date] => 2019-10-18
[opus_transaction_num] => XQ57316JKST1V
[opus_invoice_num] => GONZABP25622
[customer_name] => FAUSTINA CASTILLO
[mobile_num] => 8302638628
[opus_amount] => 100
[rq4_amount] => 50
[difference] => -50
[ocomment] => Re-Upload: We have been charged in opus for $100. Provide RQ4 invoice number for remaining amount
[mark_delete] => 0
[upload_date] => 2019-10-20
)
[3] => Array
(
[store_id] => 3264
[employee_uid] => 23723
[opus_id] => aa297h
[item_description] => PRE ATT $25 PNLS 90EXP
[opus_transaction_date] => 2019-10-19
[opus_transaction_num] => XR1181HJKW9MP
[opus_invoice_num] => C3264IN1588
[customer_name] => SOPHAT VANN
[mobile_num] => 9494668372
[opus_amount] => 70
[rq4_amount] => 25
[difference] => -45
[ocomment] => No Response. Re-Upload
[mark_delete] => 0
[upload_date] => 2019-10-20
)
[4] => Array
(
[store_id] => 4166
[employee_uid] => 568494
[opus_id] => ab7598
[item_description] => PRE ATT $40 RTR
[opus_transaction_date] => 2019-10-20
[opus_transaction_num] => X8F58P3JL2RFU
[opus_invoice_num] => I4166IN2481
[customer_name] => KELLY MC GUIRE
[mobile_num] => 6189468180
[opus_amount] => 40
[rq4_amount] => 0
[difference] => -40
[ocomment] => Re-Upload: The invoice number that you provided (I4166IN2481) belongs to September transaction. We need RQ4 transaction for October. If you're unable to provide the October invoice, it will be counted as EPin shortage.
[mark_delete] => 0
[upload_date] => 2019-10-21
)
[5] => Array
(
[store_id] => 4508
[employee_uid] => 552502
[opus_id] => ec850x
[item_description] => $30 RTR
[opus_transaction_date] => 2019-10-20
[opus_transaction_num] => XPL7M1BJL1W5D
[opus_invoice_num] => M4508IN6024
[customer_name] => PREPAID CUSTOMER
[mobile_num] => 6019109730
[opus_amount] => 30
[rq4_amount] => 0
[difference] => -30
[ocomment] => Re-Upload: The invoice number you provided (M4508IN7217) belongs to a different phone number. We need RQ4 transaction for the phone number in question. If you're unable to provide the RQ4 invoice for this transaction, it will be counted as EPin shortage.
[mark_delete] => 0
[upload_date] => 2019-10-21
)
[6] => Array
(
[store_id] => 3904
[employee_uid] => 35818
[opus_id] => tj539j
[item_description] => PRE $45 PAYG PINLESS REFILL
[opus_transaction_date] => 2019-10-20
[opus_transaction_num] => XM1PZQSJL215F
[opus_invoice_num] => N3904IN1410
[customer_name] => DORTHY JONES
[mobile_num] => 3365982631
[opus_amount] => 90
[rq4_amount] => 45
[difference] => -45
[ocomment] => Re-Upload: Please email the details to Treasury and confirm
[mark_delete] => 0
[upload_date] => 2019-10-21
)
[7] => Array
(
[store_id] => 1820
[employee_uid] => 59883
[opus_id] => cb9406
[item_description] => PRE ATT $25 PNLS 90EXP
[opus_transaction_date] => 2019-10-20
[opus_transaction_num] => XTBJO14JL25OE
[opus_invoice_num] => SEVIEIN19013
[customer_name] => RON NELSON
[mobile_num] => 8653821076
[opus_amount] => 25
[rq4_amount] => 5
[difference] => -20
[ocomment] => Re-Upload: We have been charged in opus for $25. Provide RQ4 invoice number for remaining amount
[mark_delete] => 0
[upload_date] => 2019-10-21
)
[8] => Array
(
[store_id] => 0178
[employee_uid] => 572547
[opus_id] => ms5674
[item_description] => PRE $45 PAYG PINLESS REFILL
[opus_transaction_date] => 2019-10-21
[opus_transaction_num] => XT29916JL4S69
[opus_invoice_num] => T0178BP1590
[customer_name] => GABRIEL LONGORIA JR
[mobile_num] => 4322133450
[opus_amount] => 45
[rq4_amount] => 0
[difference] => -45
[ocomment] => Re-Upload: Please email the details to Treasury and confirm
[mark_delete] => 0
[upload_date] => 2019-10-22
)
[9] => Array
(
[store_id] => 2180
[employee_uid] => 7842
[opus_id] => lm854y
[item_description] => $30 RTR
[opus_transaction_date] => 2019-10-21
[opus_transaction_num] => XC9U712JL4LA4
[opus_invoice_num] => KETERIN1836
[customer_name] => PETE JABLONSKI
[mobile_num] => 9374092680
[opus_amount] => 30
[rq4_amount] => 40
[difference] => 10
[ocomment] => Re-Upload: Credit the remaining balance to customers account in OPUS and email confirmation to Treasury
[mark_delete] => 0
[upload_date] => 2019-10-22
)
.
.
.
[63] => Array
(
[store_id] => 0175
[employee_uid] => 33738
[opus_id] => ph5953
[item_description] => PRE ATT $40 RTR
[opus_transaction_date] => 2019-10-21
[opus_transaction_num] => XE5N31DJL51RA
[opus_invoice_num] => T0175IN4563
[customer_name] => WILLIE TAYLOR
[mobile_num] => 6822701188
[opus_amount] => 40
[rq4_amount] => 50
[difference] => 10
[ocomment] => Re-Upload: Credit the remaining balance to customers account in OPUS and email confirmation to Treasury
[mark_delete] => 0
[upload_date] => 2019-10-22
)
)
Milo
3,3379 gold badges29 silver badges44 bronze badges
answered Nov 5, 2019 at 18:45
I have used following code to read «xls and xlsx» :
include 'PHPExcel/IOFactory.php';
$location='sample-excel-files.xlsx';
$objPHPExcel = PHPExcel_IOFactory::load($location);
$sheet = $objPHPExcel->getSheet(0);
$total_rows = $sheet->getHighestRow();
$total_columns = $sheet->getHighestColumn();
$set_excel_query_all=array();
for($row =2; $row <= $total_rows; $row++) {
$singlerow = $sheet->rangeToArray('A' . $row . ':' . $total_columns . $row, NULL, TRUE, FALSE);
$single_row=$singlerow[0];
$set_excel_query['store_id']=$single_row[0];
$set_excel_query['employee_uid']=$single_row[1];
$set_excel_query['opus_id']=$single_row[2];
$set_excel_query['item_description']=$single_row[3];
if($single_row[4])
{
$set_excel_query['opus_transaction_date']= date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($single_row[4]));
}
$set_excel_query['opus_transaction_num']=$single_row[5];
$set_excel_query['opus_invoice_num']=$single_row[6];
$set_excel_query['customer_name']=$single_row[7];
$set_excel_query['mobile_num']=$single_row[8];
$set_excel_query['opus_amount']=$single_row[9];
$set_excel_query['rq4_amount']=$single_row[10];
$set_excel_query['difference']=$single_row[11];
$set_excel_query['ocomment']=$single_row[12];
$set_excel_query['mark_delete']=$single_row[13];
if($single_row[14])
{
$set_excel_query['upload_date']= date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($single_row[14]));
}
$set_excel_query_all[]=$set_excel_query;
}
print_r($set_excel_query_all);
Awais Qarni
17.1k24 gold badges75 silver badges137 bronze badges
answered Nov 5, 2019 at 18:41
При построении различных сервисов, иногда бывает необходимость прочитать xlsx документ и с данными, которые в нем содержатся что-то сделать, записать в базу, вывести на страницу или переформатировать и снова записать в файл, вариантов много. В предыдущей статье, был описан процесс создания excel документов при помощи php, почитать можно здесь В этой статье будет использоваться тот же пакет phpoffice/phpspreadsheet, для работы с документами excel.
Структура проекта
├── Файл index.php ├── Файл composer.json ├── Обрабатываемый файл xlsx
Шаг 1 — установка пакета phpoffice/phpspreadsheet
Данная статья написана, с учетом того, что composer у Вас установлен, поэтому переходим к созданию файла composer.json, его содержание:
{ "require": { "phpoffice/phpspreadsheet": "^1.18" } }
В этой же директории запускаем команду composer require
После успешного выполнения этой команды, произойдет установка необходимых пакетов, с зависимостями, структура немного изменится, будет такой:
├── Файл index.php ├── Файл composer.json ├── Файл composer.lock ├── Обрабатываемый файл xlsx ├── Директория vendor └── Директории с файлами пакетов
Файл xlsx у меня с таким содержимым:
В самом простом примере прочитаем файл xlsx в массив и выведем функцией print_r, для этого необходимо написать index.php, код будет такой:
<?php set_include_path(__DIR__); require './vendor/autoload.php'; use PhpOfficePhpSpreadsheetReaderXlsx; $inputFileName = __DIR__ . '/file32342.xlsx'; $reader = new Xlsx(); $spreadsheet = $reader->load($inputFileName); $sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true); echo '<pre>'; print_r($sheetData); echo '</pre>';
В результате выполнения этого кода, увидим вот такой распечатанный массив:
Array ( [1] => Array ( [A] => Значение А1 [B] => Значение В1 [C] => Значение С1 [D] => Значение D1 [E] => Значение E1 [F] => Значение F1 [G] => Значение G1 [H] => Значение H1 [I] => Значение I1 [J] => Значение J1 [K] => Значение K1 [L] => Значение L1 [M] => Значение M1 ) [2] => Array ( [A] => Значение А2 [B] => Значение В2 [C] => Значение С2 [D] => Значение D2 [E] => Значение E2 [F] => Значение F2 [G] => Значение G2 [H] => Значение H2 [I] => Значение I2 [J] => Значение J2 [K] => Значение K2 [L] => Значение L2 [M] => Значение M2 ) [3] => Array ( [A] => Значение А3 [B] => Значение В3 [C] => Значение С3 [D] => Значение D3 [E] => Значение E3 [F] => Значение F3 [G] => Значение G3 [H] => Значение H3 [I] => Значение I3 [J] => Значение J3 [K] => Значение K3 [L] => Значение L3 [M] => Значение M3 ) [4] => Array ( [A] => Значение А4 [B] => Значение В4 [C] => Значение С4 [D] => Значение D4 [E] => Значение E4 [F] => Значение F4 [G] => Значение G4 [H] => Значение H4 [I] => Значение I4 [J] => Значение J4 [K] => Значение K4 [L] => Значение L4 [M] => Значение M4 ) [5] => Array ( [A] => Значение А5 [B] => Значение В5 [C] => Значение С5 [D] => Значение D5 [E] => Значение E5 [F] => Значение F5 [G] => Значение G5 [H] => Значение H5 [I] => Значение I5 [J] => Значение J5 [K] => Значение K5 [L] => Значение L5 [M] => Значение M5 ) [6] => Array ( [A] => Значение А6 [B] => Значение В6 [C] => Значение С6 [D] => Значение D6 [E] => Значение E6 [F] => Значение F6 [G] => Значение G6 [H] => Значение H6 [I] => Значение I6 [J] => Значение J6 [K] => Значение K6 [L] => Значение L6 [M] => Значение M6 ) [7] => Array ( [A] => Значение А7 [B] => Значение В7 [C] => Значение С7 [D] => Значение D7 [E] => Значение E7 [F] => Значение F7 [G] => Значение G7 [H] => Значение H7 [I] => Значение I7 [J] => Значение J7 [K] => Значение K7 [L] => Значение L7 [M] => Значение M7 ) [8] => Array ( [A] => Значение А8 [B] => Значение В8 [C] => Значение С8 [D] => Значение D8 [E] => Значение E8 [F] => Значение F8 [G] => Значение G8 [H] => Значение H8 [I] => Значение I8 [J] => Значение J8 [K] => Значение K8 [L] => Значение L8 [M] => Значение M8 ) [9] => Array ( [A] => Значение А9 [B] => Значение В9 [C] => Значение С9 [D] => Значение D9 [E] => Значение E9 [F] => Значение F9 [G] => Значение G9 [H] => Значение H9 [I] => Значение I9 [J] => Значение J9 [K] => Значение K9 [L] => Значение L9 [M] => Значение M9 ) [10] => Array ( [A] => Значение А10 [B] => Значение В10 [C] => Значение С10 [D] => Значение D10 [E] => Значение E10 [F] => Значение F10 [G] => Значение G10 [H] => Значение H10 [I] => Значение I10 [J] => Значение J10 [K] => Значение K10 [L] => Значение L10 [M] => Значение M10 ) [11] => Array ( [A] => Значение А11 [B] => Значение В11 [C] => Значение С11 [D] => Значение D11 [E] => Значение E11 [F] => Значение F11 [G] => Значение G11 [H] => Значение H11 [I] => Значение I11 [J] => Значение J11 [K] => Значение K11 [L] => Значение L11 [M] => Значение M11 ) [12] => Array ( [A] => Значение А12 [B] => Значение В12 [C] => Значение С12 [D] => Значение D12 [E] => Значение E12 [F] => Значение F12 [G] => Значение G12 [H] => Значение H12 [I] => Значение I12 [J] => Значение J12 [K] => Значение K12 [L] => Значение L12 [M] => Значение M12 ) [13] => Array ( [A] => Значение А13 [B] => Значение В13 [C] => Значение С13 [D] => Значение D13 [E] => Значение E13 [F] => Значение F13 [G] => Значение G13 [H] => Значение H13 [I] => Значение I13 [J] => Значение J13 [K] => Значение K13 [L] => Значение L13 [M] => Значение M13 ) [14] => Array ( [A] => Значение А14 [B] => Значение В14 [C] => Значение С14 [D] => Значение D14 [E] => Значение E14 [F] => Значение F14 [G] => Значение G14 [H] => Значение H14 [I] => Значение I14 [J] => Значение J14 [K] => Значение K14 [L] => Значение L14 [M] => Значение M14 ) [15] => Array ( [A] => Значение А15 [B] => Значение В15 [C] => Значение С15 [D] => Значение D15 [E] => Значение E15 [F] => Значение F15 [G] => Значение G15 [H] => Значение H15 [I] => Значение I15 [J] => Значение J15 [K] => Значение K15 [L] => Значение L15 [M] => Значение M15 ) [16] => Array ( [A] => Значение А16 [B] => Значение В16 [C] => Значение С16 [D] => Значение D16 [E] => Значение E16 [F] => Значение F16 [G] => Значение G16 [H] => Значение H16 [I] => Значение I16 [J] => Значение J16 [K] => Значение K16 [L] => Значение L16 [M] => Значение M16 ) [17] => Array ( [A] => Значение А17 [B] => Значение В17 [C] => Значение С17 [D] => Значение D17 [E] => Значение E17 [F] => Значение F17 [G] => Значение G17 [H] => Значение H17 [I] => Значение I17 [J] => Значение J17 [K] => Значение K17 [L] => Значение L17 [M] => Значение M17 ) [18] => Array ( [A] => Значение А18 [B] => Значение В18 [C] => Значение С18 [D] => Значение D18 [E] => Значение E18 [F] => Значение F18 [G] => Значение G18 [H] => Значение H18 [I] => Значение I18 [J] => Значение J18 [K] => Значение K18 [L] => Значение L18 [M] => Значение M18 ) [19] => Array ( [A] => Значение А19 [B] => Значение В19 [C] => Значение С19 [D] => Значение D19 [E] => Значение E19 [F] => Значение F19 [G] => Значение G19 [H] => Значение H19 [I] => Значение I19 [J] => Значение J19 [K] => Значение K19 [L] => Значение L19 [M] => Значение M19 ) [20] => Array ( [A] => Значение А20 [B] => Значение В20 [C] => Значение С20 [D] => Значение D20 [E] => Значение E20 [F] => Значение F20 [G] => Значение G20 [H] => Значение H20 [I] => Значение I20 [J] => Значение J20 [K] => Значение K20 [L] => Значение L20 [M] => Значение M20 ) [21] => Array ( [A] => Значение А21 [B] => Значение В21 [C] => Значение С21 [D] => Значение D21 [E] => Значение E21 [F] => Значение F21 [G] => Значение G21 [H] => Значение H21 [I] => Значение I21 [J] => Значение J21 [K] => Значение K21 [L] => Значение L21 [M] => Значение M21 ) [22] => Array ( [A] => Значение А22 [B] => Значение В22 [C] => Значение С22 [D] => Значение D22 [E] => Значение E22 [F] => Значение F22 [G] => Значение G22 [H] => Значение H22 [I] => Значение I22 [J] => Значение J22 [K] => Значение K22 [L] => Значение L22 [M] => Значение M22 ) [23] => Array ( [A] => Значение А23 [B] => Значение В23 [C] => Значение С23 [D] => Значение D23 [E] => Значение E23 [F] => Значение F23 [G] => Значение G23 [H] => Значение H23 [I] => Значение I23 [J] => Значение J23 [K] => Значение K23 [L] => Значение L23 [M] => Значение M23 ) [24] => Array ( [A] => Значение А24 [B] => Значение В24 [C] => Значение С24 [D] => Значение D24 [E] => Значение E24 [F] => Значение F24 [G] => Значение G24 [H] => Значение H24 [I] => Значение I24 [J] => Значение J24 [K] => Значение K24 [L] => Значение L24 [M] => Значение M24 ) [25] => Array ( [A] => Значение А25 [B] => Значение В25 [C] => Значение С25 [D] => Значение D25 [E] => Значение E25 [F] => Значение F25 [G] => Значение G25 [H] => Значение H25 [I] => Значение I25 [J] => Значение J25 [K] => Значение K25 [L] => Значение L25 [M] => Значение M25 ) [26] => Array ( [A] => Значение А26 [B] => Значение В26 [C] => Значение С26 [D] => Значение D26 [E] => Значение E26 [F] => Значение F26 [G] => Значение G26 [H] => Значение H26 [I] => Значение I26 [J] => Значение J26 [K] => Значение K26 [L] => Значение L26 [M] => Значение M26 ) [27] => Array ( [A] => Значение А27 [B] => Значение В27 [C] => Значение С27 [D] => Значение D27 [E] => Значение E27 [F] => Значение F27 [G] => Значение G27 [H] => Значение H27 [I] => Значение I27 [J] => Значение J27 [K] => Значение K27 [L] => Значение L27 [M] => Значение M27 ) [28] => Array ( [A] => Значение А28 [B] => Значение В28 [C] => Значение С28 [D] => Значение D28 [E] => Значение E28 [F] => Значение F28 [G] => Значение G28 [H] => Значение H28 [I] => Значение I28 [J] => Значение J28 [K] => Значение K28 [L] => Значение L28 [M] => Значение M28 ) [29] => Array ( [A] => Значение А29 [B] => Значение В29 [C] => Значение С29 [D] => Значение D29 [E] => Значение E29 [F] => Значение F29 [G] => Значение G29 [H] => Значение H29 [I] => Значение I29 [J] => Значение J29 [K] => Значение K29 [L] => Значение L29 [M] => Значение M29 ) [30] => Array ( [A] => Значение А30 [B] => Значение В30 [C] => Значение С30 [D] => Значение D30 [E] => Значение E30 [F] => Значение F30 [G] => Значение G30 [H] => Значение H30 [I] => Значение I30 [J] => Значение J30 [K] => Значение K30 [L] => Значение L30 [M] => Значение M30 ) )
В итоге все достаточно просто, каждая линия будет соответствовать номеру многомерного массива, где именами ключей будут выступать колонки их excel файла.
About
In this code snippet, we’ll learn how to read and write excel files in PHP.
We will use the PHPSpreadsheet library to read/write Excel files and we’ll learn how to read cells, find a specific string in a row or column, write to cells, set cell styling and formatting(like setting the border, background color, etc) and we’ll see how to insert images.
Let’s see how to do it in the example below.
Installing PHPSpreadsheet:
Install PHPSpreadsheet using Composer by opening your project directory in cmd and running this:
composer require phpoffice/phpspreadsheet
If you don’t know what Composer is or how to use it check out this post I made.
Note:
You might have to enable the gd PHP extension for this to work. I first got this error:
Problem 1
– Root composer.json requires phpoffice/phpspreadsheet ^1.18 -> satisfiable by phpoffice/phpspreadsheet[1.18.0].
– phpoffice/phpspreadsheet 1.18.0 requires ext-gd * -> it is missing from your system. Install or enable PHP’s gd extension.
FIX: If you are using XAMPP like I am open up your php.ini file and add this: extension=gd to the bottom of it. Then save the file and restart the Apache webserver and try to install the package again.
Reading Excel Files Code:
ReadExcel.php
<?php //Include the dependencies using Composer. require_once(dirname(__FILE__) ."\vendor\autoload.php"); require_once(dirname(__FILE__) ."\helperFunctions.php"); //Setup Excel reader/////////////////////////////////////////// //File to be read. $inputFileName = dirname(__FILE__) . "\readme.xlsx"; $sheetname = "First Sheet"; //Make a new instance of the Xlsx rader. $reader = new PhpOfficePhpSpreadsheetReaderXlsx(); //Load the excel file to be read. $spreadsheet = $reader->load($inputFileName); //Get the sheet by name. $sheet = $spreadsheet->getSheetByName($sheetname); /////////////////////////////////////////////////////////////// //Reading file///////////////////////////////////////////////// //The row number of the header. $columnNameRow = 1; //The row number where our data starts. $dataRow = $columnNameRow+1; //If you don't know the exact column number you search for it with this helper function. $column = findColumn($sheet, "greetings", $columnNameRow); //Or if you need to search the rows: //$row = findRow($sheet, "text to find", $column); //Data array that will store the read data. $readSheetData = []; //Read rows until an empty one is hit. $currentCellData = "/"; for($i = $dataRow; $currentCellData != ""; $i++){ //Get cell data. $currentCellData = $sheet->getCellByColumnAndRow($column, $i)->getCalculatedValue(); //If data is present add it to the data array. if($currentCellData != null) $readSheetData[] = $currentCellData; } //Display data array. foreach($readSheetData as $item) echo $item . "<br>"; ////////////////////////////////////////////////////////////////
HelperFunctions.php
<?php //Helper functions////////////////////////////////////////////// function findColumn($spreadsheet, $word, $row){ $column = 1; $cellContent = $spreadsheet->getCellByColumnAndRow($column, $row)->getValue(); while($cellContent != $word){ $column++; $cellContent = $spreadsheet->getCellByColumnAndRow($column, $row)->getValue(); } return $column; } function findRow($spreadsheet, $word, $column){ $row = 1; $cellContent = $spreadsheet->getCellByColumnAndRow($column, $row)->getValue(); while($cellContent != $word) { $row++; $cellContent = $spreadsheet->getCellByColumnAndRow($column, $row)->getValue(); } return $row; } ////////////////////////////////////////////////////////////////
Resulting Output:
Writing Excel Files Code:
WriteExcel.php
<?php //Include the dependencies using Composer. require_once(dirname(__FILE__) ."\vendor\autoload.php"); use PhpOfficePhpSpreadsheetSpreadsheet; use PhpOfficePhpSpreadsheetWriterXlsx; use PhpOfficePhpSpreadsheetWriterDrawing; //Setup Excel writer//////////////////////////////////////////// //File to be read. $inputFileName = dirname(__FILE__) . "readme.xlsx"; $sheetname = "First Sheet"; //Make a new spreadsheet. $spreadsheet = new Spreadsheet(); //Get active sheet. $sheet = $spreadsheet->getActiveSheet(); //Set sheet name. $sheet->setTitle('Data'); //////////////////////////////////////////////////////////////// //Writing file////////////////////////////////////////////////// $dataToWrite1 = [ 15465, 532185, 2566, 54886 ]; $dataToWrite2 = [ 5694, 56964, 321789, 45623 ]; //Make header(optional). $sheet->setCellValue('A1', "Data Set 1"); $sheet->setCellValue('B1', "Data Set 2"); //Make a bottom border(optional). $sheet->getStyle('A1:B1')->getBorders()->getBottom()->setBorderStyle(PhpOfficePhpSpreadsheetStyleBorder::BORDER_THIN); //Set header background color(optional). $sheet->getStyle('A1:B1')->getFill()->setFillType(PhpOfficePhpSpreadsheetStyleFill::FILL_SOLID)->getStartColor()->setRGB('d2d3d1'); //Set text bold. $sheet->getStyle("A1:B1")->getFont()->setBold(true); //Set auto resize(optional). $sheet->getColumnDimension('A')->setAutoSize(true); //For more styling/formatting info. check out the official documentation: https://phpspreadsheet.readthedocs.io/en/latest/ //Write data 1. $i = 2; foreach($dataToWrite1 as $item){ //Write value into cell. $sheet->setCellValue('A'.$i, $item); //Set cell alignment(optional). $sheet->getStyle('A'.$i)->getAlignment()->setHorizontal(PhpOfficePhpSpreadsheetStyleAlignment::HORIZONTAL_CENTER); $i++; } //Write data 2. $i = 2; foreach($dataToWrite2 as $item){ //Write value into cell. $sheet->setCellValue('B'.$i, $item); //Set cell alignment(optional). $sheet->getStyle('B'.$i)->getAlignment()->setHorizontal(PhpOfficePhpSpreadsheetStyleAlignment::HORIZONTAL_CENTER); $i++; } //Adding an image. //Create drawing. $objDrawing = new PhpOfficePhpSpreadsheetWorksheetMemoryDrawing(); //Get image path. $imgPathName = dirname(__FILE__) . "\PHP Reading And Writing Excel Files.jpg"; //Create gdImage from image. $gdImage = imagecreatefromjpeg($imgPathName); //Set gdImage as a property to drawing. $objDrawing->setImageResource($gdImage); //Set drawing properties. $objDrawing->setName('Thumbnail'); $objDrawing->setDescription('PHP Reading And Writing Excel Files'); //Set file type. $objDrawing->setRenderingFunction(PhpOfficePhpSpreadsheetWorksheetMemoryDrawing::RENDERING_JPEG); $objDrawing->setMimeType(PhpOfficePhpSpreadsheetWorksheetMemoryDrawing::MIMETYPE_DEFAULT); //Set position. $objDrawing->setCoordinates('D1'); //Set position offset. $objDrawing->setOffsetX(50); $objDrawing->setOffsetY(50); //Set width and height. $objDrawing->setWidth(400); $objDrawing->setHeight(100); $objDrawing->setWorksheet($sheet); //Write excel file. $savePath = dirname(__FILE__); $writer = new Xlsx($spreadsheet); $writer->save($savePath . "\New File.xlsx"); ////////////////////////////////////////////////////////////////
Resulting Output:
Related Posts:
report this ad
Leave a Reply
PHPExcel — библиотека для создания и чтения данных из файлов формата OpenXML (который используется в MS Excel 2007). С ее помощью можно считывать из файлов, записывать в файлы, форматировать содержимое, работать с формулами и т.д. Для работы PHPExcel требуется версия PHP 5.2 или выше, с установленными библиотеками Zip, XML и GD2.
Установка PHPExcel
Первым делом библиотеку необходимо скачать. Для этого переходим на официальный сайт библиотеки и скачиваем архив PHPExcel-1.7.8.zip. После распаковки мы получим несколько файлов и папок:
- Classes
- Documentation
- Tests
- changelog.txt
- install.txt
- license.txt
Файлы — это различные описания по предыдущим версиям, лицензионное соглашение и очень краткая инструкция по установке. Далее, в папке Classes, содержится непосредственно сама библиотека PHPExcel — эту папку необходимо скопировать в корень нашего скрипта.
В папке Documentation содержится документация по библиотеке на английском языке. В папке Tests — примеры по использованию библиотеки.
Создание Excel-файла
Итак, давайте создадим файл makeexcel.php и начинаем работать с ним. Для начала нам необходимо подключить главный файл библиотеки PHPExcel.php (который находится в папке Classes) и создать объект класса PHPExcel:
require_once 'Classes/PHPExcel.php'; $pExcel = new PHPExcel();
Настройки листа книги Excel
Документ Excel состоит из книг, а каждая книга в свою очередь, состоит из листов. Далее лист состоит из набора ячеек, доступ к которым осуществляется по координатам. То есть у нас есть столбцы, которые имеют буквенные имена (А, В, С и т.д) и есть строки, которые пронумерованы. Значит, что бы получить доступ к первой ячейке нужно указать код А1. Точно также мы с помощью библиотеки будем получать доступ к каждой ячейке.
Итак, первым делом необходимо выбрать активный лист, на который мы будем выводить данные и получить объект этого листа:
$pExcel->setActiveSheetIndex(0); $aSheet = $pExcel->getActiveSheet();
С помощью метода setActiveSheetIndex(0) указываем индекс (номер) активного листа. Нумерация листов начинается с нуля. Далее с помощью метода getActiveSheet() получаем объект этого активного листа, то есть другими словами получаем доступ к нему для работы. И сохраняем этот объект в переменную $aSheet.
Если Вы захотите указать активным какой то другой лист, то вначале его необходимо создать, при помощи метода:
$pExcel->createSheet();
Затем, по аналогии, указываем индекс и получаем объект активного листа.
// Ориентация страницы и размер листа $aSheet->getPageSetup() ->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT); $aSheet->getPageSetup() ->SetPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); // Поля документа $aSheet->getPageMargins()->setTop(1); $aSheet->getPageMargins()->setRight(0.75); $aSheet->getPageMargins()->setLeft(0.75); $aSheet->getPageMargins()->setBottom(1); // Название листа $aSheet->setTitle('Прайс-лист'); // Шапка и футер (при печати) $aSheet->getHeaderFooter() ->setOddHeader('&CТД ТИНКО: прайс-лист'); $aSheet->getHeaderFooter() ->setOddFooter('&L&B'.$aSheet->getTitle().'&RСтраница &P из &N'); // Настройки шрифта $pExcel->getDefaultStyle()->getFont()->setName('Arial'); $pExcel->getDefaultStyle()->getFont()->setSize(8);
Вначале задаем ориентацию листа при помощи метода setOrientation(), которому передаем константу класса PHPExcel_Worksheet_PageSetup:
- ORIENTATION_PORTRAIT — книжная
- ORIENTATION_LANDSCAPE — альбомная
Обратите внимание, что перед методом setOrientation() необходимо вызвать метод getPageSetup(), который предоставляет доступ к настройкам страницы.
Далее вызываем метод SetPaperSize(), который позволяет задать размер страницы для печати. Ему передаем параметром константу PAPERSIZE_A4 класса PHPExcel_Worksheet_PageSetup. Что означает, что размер листа страницы будет установлен А4.
Далее устанавливаем поля документа, то есть отступы от краев документа. Отступы задаются в специальных символьных единицах. Вначале, обратите внимание, вызываем у объекта $aSheet метод getPageMargins(), который вернет объект класса, отвечающего за настройки полей страницы. Затем вызываем методы setTop(), setRight(), setLeft() и setBottom().
Далее при помощи метода setTitle(‘Прайс лист’) задаем название нашего листа.
Если нужно, можно при печати выводить шапку и подвал листа:
- setOddHeader();
- setOddFooter();
Обратите внимание на передаваемые параметры:
- для шапки передаем строку ‘&CТД ТИНКО: прайс-лист’; метка &C означает, что текст нужно расположить по центру.
- для подвала передаем строку ‘&L&B’.$aSheet->getTitle().’&RСтраница &P из &N’; это означает, что нужно вывести слева и жирным шрифтом (&L&B) название листа (метод $aSheet->getTitle()), затем справа (&R) вывести номер страницы (&P) из общего количества страниц (&N).
Затем указываем настройки шрифта по умолчанию:
- setName(‘Arial’) — задаем имя шрифта;
- setSize(8) — задаем размер шрифта.
Наполнение документа данными
Для начала давайте зададим ширину столбцов (в символьных единицах), которые нам понадобятся:
$aSheet->getColumnDimension('A')->setWidth(3); $aSheet->getColumnDimension('B')->setWidth(7); $aSheet->getColumnDimension('C')->setWidth(20); $aSheet->getColumnDimension('D')->setWidth(40); $aSheet->getColumnDimension('E')->setWidth(10);
Теперь заполним несколько ячеек текстом:
$aSheet->mergeCells('A1:E1'); $aSheet->getRowDimension('1')->setRowHeight(20); $aSheet->setCellValue('A1','ТД ТИНКО'); $aSheet->mergeCells('A2:E2'); $aSheet->setCellValue('A2','Поставка технических средств безопасности'); $aSheet->mergeCells('A4:C4'); $aSheet->setCellValue('A4','Дата создания прайс-листа');
Здесь мы сначала объеденяем ячейки с А1 до E1 при помощи метода mergeCells(), далее задаем высоту строки: вначале получаем доступ к строке 1 при помощи метода getRowDimension(‘1’), затем задаем высоту — setRowHeight(20). Далее при помощи метода setCellValue(‘A1′,’ТД ТИНКО’), устанавливаем значение ячейки А1.
Далее давайте в ячейку D4 запишем текущую дату:
// Записываем данные в ячейку $date = date('d-m-Y'); $aSheet->setCellValue('D4',$date); // Устанавливает формат данных в ячейке (дата вида дд-мм-гггг) $aSheet->getStyle('D4')->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14);
С помощью констант, определенных в классе PHPExcel_Style_NumberFormat, можно задать формат ячейки: FORMAT_GENERAL (общий), FORMAT_TEXT (текст), FORMAT_NUMBER (число), FORMAT_NUMBER_00 (число с дробной частью), FORMAT_PERCENTAGE (процент), FORMAT_PERCENTAGE_00 (процент с дробной частью) и т.п.
Теперь, используя метод setCellValue(), а также цикл while() наполним данными наш прайс-лист:
mysql_connect(DB_HOST, DB_USER, DB_PASS); mysql_query('SET NAMES utf8'); mysql_select_db(DB_NAME); // Создаем шапку таблички данных $aSheet->setCellValue('A6','№'); $aSheet->setCellValue('B6','Код'); $aSheet->setCellValue('C6','Наименование'); $aSheet->setCellValue('D6','Описание'); $aSheet->setCellValue('E6','Цена'); $query = "SELECT `code`, `name`, `description`, `price` FROM `products` WHERE 1 LIMIT 10"; $res = mysql_query( $query ); $i = 1; while( $prd = mysql_fetch_assoc($res) ) { $aSheet->setCellValue('A'.($i+6), $i); $aSheet->setCellValue('B'.($i+6), $prd['code']); $aSheet->setCellValue('C'.($i+6), $prd['name']); $aSheet->setCellValue('D'.($i+6), $prd['description']); $aSheet->setCellValue('E'.($i+6), $prd['price']); $i++; }
Стилизация данных
Давайте немного украсим наш прайс-лист, то есть каждой ячейке добавим стилей. Для этого необходимо создать массив со стилями и при помощи метода applyFromArray(), применить этот массив к ячейке (или ячейкам):
// массив стилей $style_wrap = array( // рамки 'borders'=>array( // внешняя рамка 'outline' => array( 'style'=>PHPExcel_Style_Border::BORDER_THICK, 'color' => array( 'rgb'=>'006464' ) ), // внутренняя 'allborders'=>array( 'style'=>PHPExcel_Style_Border::BORDER_THIN, 'color' => array( 'rgb'=>'CCCCCC' ) ) ) ); $aSheet->getStyle('A1:F'.($i+5))->applyFromArray($style_wrap);
Теперь, по аналогии, применим стили к остальным ячейкам:
// Стили для верхней надписи (первая строка) $style_header = array( // Шрифт 'font'=>array( 'bold' => true, 'name' => 'Times New Roman', 'size' => 15, 'color'=>array( 'rgb' => '006464' ) ), // Выравнивание 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, 'vertical' => PHPExcel_STYLE_ALIGNMENT::VERTICAL_CENTER, ), // Заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => '99CCCC' ) ), 'borders'=>array( 'bottom'=>array( 'style'=>PHPExcel_Style_Border::BORDER_THIN, 'color' => array( 'rgb'=>'006464' ) ) ) ); $aSheet->getStyle('A1:E1')->applyFromArray($style_header); // Стили для слогана компании (вторая строка) $style_slogan = array( // шрифт 'font'=>array( 'bold' => true, 'italic' => true, 'name' => 'Times New Roman', 'size' => 12, 'color'=>array( 'rgb' => '006464' ) ), // выравнивание 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, 'vertical' => PHPExcel_STYLE_ALIGNMENT::VERTICAL_CENTER, ), // заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => '99CCCC' ) ), //рамки 'borders' => array( 'bottom' => array( 'style'=>PHPExcel_Style_Border::BORDER_THIN, 'color' => array( 'rgb'=>'006464' ) ) ) ); $aSheet->getStyle('A2:E2')->applyFromArray($style_slogan); // Стили для текта возле даты $style_tdate = array( // выравнивание 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_RIGHT, ), // заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => 'EEEEEE' ) ), // рамки 'borders' => array( 'right' => array( 'style'=>PHPExcel_Style_Border::BORDER_NONE ) ) ); $aSheet->getStyle('A4:D4')->applyFromArray($style_tdate); // Стили для даты $style_date = array( // заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => 'EEEEEE' ) ), // рамки 'borders' => array( 'left' => array( 'style'=>PHPExcel_Style_Border::BORDER_NONE ) ), ); $aSheet->getStyle('E4')->applyFromArray($style_date); // Стили для шапки таблицы (шестая строка) $style_hprice = array( // выравнивание 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, ), // заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => 'CFCFCF' ) ), // шрифт 'font'=>array( 'bold' => true, /* 'italic' => true, */ 'name' => 'Times New Roman', 'size' => 10 ), ); $aSheet->getStyle('A6:E6')->applyFromArray($style_hprice); // Cтили для данных в таблице прайс-листа $style_price = array( 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_LEFT, ) ); $aSheet->getStyle('A7:E'.($i+5))->applyFromArray($style_price);
Сохранение документа
Осталось только сохранить наш документ:
/* $objWriter = PHPExcel_IOFactory::createWriter($pExcel, 'Excel5'); $objWriter->save('simple.xls'); */ $objWriter = PHPExcel_IOFactory::createWriter($pExcel, 'Excel2007'); $objWriter->save('simple.xlsx');
или так
/* $objWriter = new PHPExcel_Writer_Excel5($pExcel); $objWriter->save('simple.xls'); */ $objWriter = new PHPExcel_Writer_Excel2007($pExcel); $objWriter->save('simple.xlsx');
Если нужно вывести документ в браузер
/* header('Content-Type:application/vnd.ms-excel'); header('Content-Disposition:attachment;filename="simple.xls"'); $objWriter = new PHPExcel_Writer_Excel5($pExcel); */ header('Content-Type:xlsx:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition:attachment;filename="simple.xlsx"'); $objWriter = new PHPExcel_Writer_Excel2007($pExcel); $objWriter->save('php://output');
Первый заголовок указывает браузеру тип открываемого контента — это документ формата Excel. Второй — говорит браузеру, что документ необходимо отдать пользователю на скачивание под именем simple.xlsx.
Добавление формул
Формула Excel — это математическое выражение, которое создается для вычисления результата и которое может зависеть от содержимого других ячеек. Формула в ячейке Excel может содержать данные, ссылки на другие ячейки, а также обозначение действий, которые необходимо выполнить.
Использование ссылок на ячейки позволяет пересчитывать результат по формулам, когда происходят изменения содержимого ячеек, включенных в формулы. Формулы Excel начинаются со знака =. Скобки ( ) могут использоваться для определения порядка математических операции.
Примеры формул Excel: =27+36, =А1+А2-АЗ, =SUM(А1:А5), =MAX(АЗ:А5), =(А1+А2)/АЗ.
PHPExcel тоже поддерживает добавление формул в ячейки. Установить формулу можно так:
// формула для вычисления суммы $formula = '=SUM(D2:D4)'; $aSheet->setCellValue('D5', $formula);
Чтение Excel-файла
Самый простой вариант — считать все таблицы (на всех листах) и записать данные в трехмерный массив:
// Подключаем библиотеку require_once 'Classes/PHPExcel.php'; $pExcel = PHPExcel_IOFactory::load('simple.xlsx'); // Цикл по листам Excel-файла foreach ($pExcel->getWorksheetIterator() as $worksheet) { // выгружаем данные из объекта в массив $tables[] = $worksheet->toArray(); }
Теперь можно вывести массив:
// Цикл по листам Excel-файла foreach( $tables as $table ) { echo '<table border="1">'; // Цикл по строкам foreach($table as $row) { echo '<tr>'; // Цикл по колонкам foreach( $row as $col ) { echo '<td>'.$col.'</td>'; } echo '</tr>'; } echo '</table>'; }
Для получения значения отдельной ячейки:
// выбираем лист, с которым будем работать $pExcel->setActiveSheetIndex(0); $aSheet = $pExcel->getActiveSheet(); // получаем доступ к ячейке по номеру строки // (нумерация с единицы) и столбца (нумерация с нуля) $cell = $aSheet->getCellByColumnAndRow($col, $row); // читаем значение ячейки $value = $cell->getValue()
или так:
$value = $pExcel->getActiveSheet()->getCellValue('B2')
Еще два примера:
// Цикл по листам Excel-файла foreach( $pExcel->getWorksheetIterator() as $worksheet ) { echo '<h2>Лист «'.$worksheet->getTitle().'»</h2>'; echo '<table border="1">'; // Цикл по строкам foreach( $worksheet->getRowIterator() as $row ) { echo '<tr>'; // Цикл по колонкам foreach( $row->getCellIterator() as $cell ) { $value = $cell->getValue(); // $calcValue = $cell->getCalculatedValue() // $dataType = PHPExcel_Cell_DataType::dataTypeForValue($value); echo '<td>'.$value.'</td>'; } echo '</tr>'; } echo '</table>'; }
// Цикл по листам Excel-файла foreach ($pExcel->getWorksheetIterator() as $worksheet) { $worksheetTitle = $worksheet->getTitle(); $highestRow = $worksheet->getHighestRow(); // например, 10 $highestColumn = $worksheet->getHighestColumn(); // например, 'E' $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); $nrColumns = ord($highestColumn) - 64; echo '<h2>Лист «'.$worksheetTitle.'» '; echo $nrColumns . ' колонок (A-' . $highestColumn . ') '; echo ' и ' . $highestRow . ' строк.</h2>'; echo '<table border="1">'; // Цикл по строкам for ($row = 1; $row <= $highestRow; $row++) { echo '<tr>'; // Цикл по колонкам for ($col = 0; $col < $highestColumnIndex; $col++) { $cell = $worksheet->getCellByColumnAndRow($col, $row); echo '<td>'.$cell->getValue().'</td>'; } echo '</tr>'; } echo '</table>'; }
Дополнительно
- Документация разработчика PHPExcel на русском
- Блог на Laravel 7, часть 17. Временная зона для пользователей, деплой на хостинг TimeWeb
- Блог на Laravel 7, часть 16. Роль нового пользователя, сообщение админу о новом посте
- Блог на Laravel 7, часть 15. Восстановление постов, slug для категории, поста и страницы
- Блог на Laravel 7, часть 14. Валидация данных и права доступа при загрузке изображений
- Блог на Laravel 7, часть 13. Загрузка и ресайз изображений для категорий и постов блога
- Блог на Laravel 7, часть 12. Доп.страницы сайта в панели управления и в публичной части
- Блог на Laravel 7, часть 11. Панель управления — назначение ролей и прав для пользователей
Поиск:
Excel • MS • PHP • Web-разработка
Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.