Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcel Hauri committed Nov 7, 2016
0 parents commit babd09e
Show file tree
Hide file tree
Showing 8 changed files with 251 additions and 0 deletions.
88 changes: 88 additions & 0 deletions Model/Parser.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<?php

namespace Staempfli\Spreadsheet\Model;

use Akeneo\Component\SpreadsheetParser\SpreadsheetParser;

/**
* Class Reader
* @package Staempfli\Spreadsheet\Model\Spreadsheet
*/
class Parser
{
/**
* @var array
*/
protected $data = [];
/**
* @var $spreadsheet \Akeneo\Component\SpreadsheetParser\Xlsx\Spreadsheet | \Akeneo\Component\SpreadsheetParser\Csv\Spreadsheet
*/
protected $spreadsheet;
/**
* @var
*/
protected $worksheet;
/**
* @var SpreadsheetParser
*/
protected $spreadsheetParser;

/**
* Reader constructor.
* @param SpreadsheetParser $spreadsheetParser
*/
public function __construct(
SpreadsheetParser $spreadsheetParser
) {
$this->spreadsheetParser = $spreadsheetParser;
}

/**
* @param $file
* @param int $worksheetIndex
* @return array
*/
public function readFile($file, $worksheetIndex = 0)
{
$this->spreadsheet = $this->spreadsheetParser->open($file);
return $this->getWorksheetData($worksheetIndex);
}

/**
* @return \Akeneo\Component\SpreadsheetParser\Csv\Spreadsheet|\Akeneo\Component\SpreadsheetParser\Xlsx\Spreadsheet
*/
public function getSpreadsheet()
{
return $this->spreadsheet;
}

/**
* @return array|bool|\string[]
*/
public function getWorksheets()
{
if ($this->spreadsheet) {
return $this->spreadsheet->getWorksheets();
}
return false;
}

/**
* @param int $worksheetIndex
* @return array
*/
public function getWorksheetData($worksheetIndex = 0)
{
if (is_string($worksheetIndex)) {
$worksheetIndex = $this->spreadsheet->getWorksheetIndex($worksheetIndex);
}
$this->worksheet = $this->spreadsheet->createRowIterator($worksheetIndex);

if (!$this->data) {
foreach ($this->worksheet as $index => $rows) {
$this->data[$index] = $rows;
}
}
return $this->data;
}
}
66 changes: 66 additions & 0 deletions Model/Uploader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php

namespace Staempfli\Spreadsheet\Model;

use Magento\Framework\File\UploaderFactory;
use Magento\Framework\Filesystem;
use Magento\ImportExport\Model\Import;
use Magento\Framework\App\Filesystem\DirectoryList;

class Uploader
{
const STORAGE_DIR = 'spreadsheet/';
/**
* @var string
*/
protected $file = '';
/**
* @var Filesystem\Directory\WriteInterface
*/
protected $uploadDir;
/**
* @var UploaderFactory
*/
protected $uploaderFactory;
/**
* @var Filesystem
*/
protected $filesystem;

/**
* Upload constructor.
* @param UploaderFactory $uploaderFactory
* @param Filesystem $filesystem
*/
public function __construct(
UploaderFactory $uploaderFactory,
Filesystem $filesystem
) {
$this->uploaderFactory = $uploaderFactory;
$this->filesystem = $filesystem;
$this->uploadDir = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
}

/**
* @param array $params
* @return string
* @throws \Exception
*/
public function upload($params = ['fileId' => 'file'])
{
/** @var $uploader \Magento\Framework\File\Uploader */
$uploader = $this->uploaderFactory->create($params);
$saveDir = $this->uploadDir->getAbsolutePath(self::STORAGE_DIR);
$result = $uploader->save($saveDir);
$this->file = $result['path'] . $result['file'];
return $this->file;
}

/**
* @return string
*/
public function getFile()
{
return $this->file;
}
}
47 changes: 47 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
Magento 2 Spreadsheet Parser
=============

Facts
-----
Parse XLSX, XLSM and CSV Files from Excel

Requirements
------------
- PHP >= 7.0.*
- Magento >= 2.1.*

Compatibility
-------------
- Magento >= 2.1

Usage
-----
Load Uploader and Parser via DI, so they can be used in your method.

```php
$file = $this->uploader->upload(['fileId' => \Magento\ImportExport\Model\Import::FIELD_NAME_SOURCE_FILE]);
$data = $this->parser->readFile($file);
foreach ($data as $index => $values) {
var_dump($index, $values);
}
```

Support
-------
If you have any issues with this extension, open an issue on [GitHub](https://github.com/staempfli/magento2-module-spreadsheet/issues).

Contribution
------------
Any contribution is highly appreciated. The best way to contribute code is to open a [pull request on GitHub](https://help.github.com/articles/using-pull-requests).

Developer
---------
Staempfli Webteam and all other [contributors](https://github.com/staempfli/magento2-module-spreadsheet/contributors)

License
-------
[Open Software License ("OSL") v. 3.0](https://opensource.org/licenses/OSL-3.0)

Copyright
---------
(c) 2016, Stämpfli AG
7 changes: 7 additions & 0 deletions Test/Unit/Model/Parser.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace Staempfli\Spreadsheet\Test\Unit\Model;

class ParserTest extends \PHPUnit_Framework_TestCase
{
}
7 changes: 7 additions & 0 deletions Test/Unit/Model/Uploader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace Staempfli\Spreadsheet\Test\Unit\Model;

class UploaderTest extends \PHPUnit_Framework_TestCase
{
}
27 changes: 27 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"name": "staempfli/magento2-module-spreadsheet",
"description": "Magento 2 Module for parsing xlsx, xlsm and csv files from Excel",
"require": {
"php": "~7.0.0",
"akeneo-labs/spreadsheet-parser": "^1.2"
},
"type": "magento2-module",
"license": [
"OSL-3.0",
"AFL-3.0"
],
"authors": [
{
"name": "Marcel Hauri",
"email": "marcel.hauri@staempfli.com"
}
],
"autoload": {
"files": [
"registration.php"
],
"psr-4": {
"Staempfli\\Spreadsheet\\": ""
}
}
}
3 changes: 3 additions & 0 deletions etc/module.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Staempfli_Spreadsheet" setup_version="1.0.0" />
</config>
6 changes: 6 additions & 0 deletions registration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Staempfli_Spreadsheet',
__DIR__
);

0 comments on commit babd09e

Please sign in to comment.