I'm trying to get a list of all of our products in CSV or Excel format which has the SKU, Product Name, & Product Price. Is there is a way to acquire this from Magento2?
2 Answers
Let’s assume that you have created simple module
. Now, create controller for create csv file and download at app/code/MS/Helloworld/Controller/Index/ExportCsv.php
and paste the below code :
<?php
namespace MS\Helloworld\Controller\Index;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\App\ResponseInterface;
class ExportCsv extends \Magento\Framework\App\Action\Action
{
/**
* @var \Magento\Framework\App\Response\Http\FileFactory
*/
protected $fileFactory;
/**
* @var \Magento\Catalog\Model\ProductFactory
*/
protected $productFactory;
/**
* @var \Magento\Framework\View\Result\LayoutFactory
*/
protected $resultLayoutFactory;
/**
* @var \Magento\Framework\File\Csv
*/
protected $csvProcessor;
/**
* @var \Magento\Framework\App\Filesystem\DirectoryList
*/
protected $directoryList;
/**
* @param \Magento\Framework\App\Action\Context $context
* @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
* @param \Magento\Catalog\Model\ProductFactory $productFactory
* @param \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
* @param \Magento\Framework\File\Csv $csvProcessor
* @param \Magento\Framework\App\Filesystem\DirectoryList $directoryList
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\App\Response\Http\FileFactory $fileFactory,
\Magento\Catalog\Model\ProductFactory $productFactory,
\Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory,
\Magento\Framework\File\Csv $csvProcessor,
\Magento\Framework\App\Filesystem\DirectoryList $directoryList
) {
$this->fileFactory = $fileFactory;
$this->productFactory = $productFactory;
$this->resultLayoutFactory = $resultLayoutFactory;
$this->csvProcessor = $csvProcessor;
$this->directoryList = $directoryList;
parent::__construct($context);
}
/**
* CSV Create and Download
*
* @return ResponseInterface
* @throws \Magento\Framework\Exception\FileSystemException
*/
public function execute()
{
/** Add yout header name here */
$content[] = [
'entity_id' => __('Entity ID'),
'sku' => __('Sku'),
'name' => __('Product Name'),
'price' => __('Product Price'),
];
$resultLayout = $this->resultLayoutFactory->create();
$product = $this->productFactory->create()->getCollection();
$collection = $this->productFactory->create()->getCollection();
$fileName = 'product_data_file.csv'; // Add Your CSV File name
$filePath = $this->directoryList->getPath(DirectoryList::MEDIA) . "/" . $fileName;
while ($product = $collection->fetchItem()) {
$content[] = [
$product->getEntityId(),
$product->getSku(),
$product->getName(),
$product->getPrice()
];
}
$this->csvProcessor->setEnclosure('"')->setDelimiter(',')->saveData($filePath, $content);
return $this->fileFactory->create(
$fileName,
[
'type' => "filename",
'value' => $fileName,
'rm' => true, // True => File will be remove from directory after download.
],
DirectoryList::MEDIA,
'text/csv',
null
);
}
}
Store Manager for Magento app allows exporting separate fields of the product in any format