I have created a Admin Grid using Ui-Component.
Edit in your Ui-Component file where Admin Grid Show
[vendor_name] \ [module_name] \view\adminhtml\ui_component
Add this code to add button in Admin Grid
Ui-ComponentFIleName.xml
<item name="buttons" xsi:type="array">
<item name="import" xsi:type="array">
<item name="name" xsi:type="string">import</item>
<item name="label" xsi:type="string" translate="true">Import</item>
<item name="class" xsi:type="string">secondary</item>
<item name="url" xsi:type="string">*/*/importdata</item>
<item name="sortOrder" xsi:type="number">20</item>
</item>
<item name="export" xsi:type="array">
<item name="name" xsi:type="string">export</item>
<item name="label" xsi:type="string" translate="true">Export</item>
<item name="class" xsi:type="string">secondary</item>
<item name="url" xsi:type="string">*/*/exportdata</item>
<item name="sortOrder" xsi:type="number">30</item>
</item>
</item>
Now create a File that Export or Import Data. File Name must be same as you defined in Ui-Component file
<item name="url" xsi:type="string">*/*/exportdata</item>
<item name="url" xsi:type="string">*/*/importdata</item>
File path must be like this
[vendor_name] \ [module_name] \ Controller \ Adminhtml \ [Controller_name] \ Exportdata.php
Exportdata.php
<?php
namespace [vendor_name]\[module_name]\Controller\Adminhtml\[Controller_name];
use Magento\Framework\App\Filesystem\DirectoryList;
class Exportdata extends \Magento\Backend\App\Action
{
protected $uploaderFactory;
protected $_locationFactory;
public function __construct(
\Magento\Backend\App\Action\Context $context,
\Magento\Framework\App\Response\Http\FileFactory $fileFactory,
\Magento\Framework\Filesystem $filesystem,
\[vendor_name]\[module_name]\Model\locatorFactory $locationFactory // This is returns Collaction of Data
) {
parent::__construct($context);
$this->_fileFactory = $fileFactory;
$this->_locationFactory = $locationFactory;
$this->directory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR); // VAR Directory Path
parent::__construct($context);
}
public function execute()
{
$name = date('m-d-Y-H-i-s');
$filepath = 'export/export-data-' .$name. '.csv'; // at Directory path Create a Folder Export and FIle
$this->directory->create('export');
$stream = $this->directory->openFile($filepath, 'w+');
$stream->lock();
//column name dispay in your CSV
$columns = ['Col-1-name','Col-2-name','Col-3-name','Col-4-name','Col-5-name','Col-6-name','Col-7-name','Col-8-name','Col-9-name',];
foreach ($columns as $column)
{
$header[] = $column; //storecolumn in Header array
}
$stream->writeCsv($header);
$location = $this->_locationFactory->create();
$location_collection = $location->getCollection(); // get Collection of Table data
foreach($location_collection as $item){
$itemData = [];
// column name must same as in your Database Table
$itemData[] = $item->getData('col-1-name');
$itemData[] = $item->getData('col-2-name');
$itemData[] = $item->getData('col-3-name');
$itemData[] = $item->getData('col-4-name');
$itemData[] = $item->getData('col-5-name');
$itemData[] = $item->getData('col-6-name');
$itemData[] = $item->getData('col-7-name');
$itemData[] = $item->getData('col-8-name');
$itemData[] = $item->getData('col-9-name');
$stream->writeCsv($itemData);
}
$content = [];
$content['type'] = 'filename'; // must keep filename
$content['value'] = $filepath;
$content['rm'] = '1'; //remove csv from var folder
$csvfilename = 'locator-import-'.$name.'.csv';
return $this->_fileFactory->create($csvfilename, $content, DirectoryList::VAR_DIR);
}
}
Now you can Click on the Export Button and see your .csv file Downloaded below.
I Hope This Helps You.