|
@@ -169,24 +169,47 @@ class Dump
|
|
*/
|
|
*/
|
|
private function dump($fileInfo)
|
|
private function dump($fileInfo)
|
|
{
|
|
{
|
|
|
|
+ // 源文件
|
|
|
|
+ $file = $this->sourceDir . self::$DS . $fileInfo['basename'];
|
|
|
|
+
|
|
|
|
+ $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
|
|
|
+ $reader->setReadDataOnly(true);
|
|
|
|
+ $spreadsheet = $reader->load($file);
|
|
|
|
+ // 读取所有sheet
|
|
|
|
+ $sheetList = $spreadsheet->getSheetNames();
|
|
|
|
+ foreach ($sheetList as $index => $sheetName) {
|
|
|
|
+ $sourceData = $spreadsheet->getSheet($index)->toArray();
|
|
|
|
+ $this->dumpSheet($fileInfo['basename'], $sheetName, $sourceData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 导出sheet中的数据
|
|
|
|
+ * @param string $fileName 文件名
|
|
|
|
+ * @param string $sheetName sheet名
|
|
|
|
+ * @param array $sourceData
|
|
|
|
+ * @return boolean
|
|
|
|
+ */
|
|
|
|
+ private function dumpSheet($fileName, $sheetName, $sourceData)
|
|
|
|
+ {
|
|
|
|
+
|
|
// 找到文件对应的执行脚本
|
|
// 找到文件对应的执行脚本
|
|
// 如果找不到, 则使用默认的配置
|
|
// 如果找不到, 则使用默认的配置
|
|
- $script = $this->scriptDir . self::$DS . $fileInfo['filename'] . '.php';
|
|
|
|
|
|
+ $script = $this->scriptDir . self::$DS . $sheetName . '.php';
|
|
if (!file_exists($script)) {
|
|
if (!file_exists($script)) {
|
|
- vd(sprintf('[%s]对应的脚本文件不存在, 脚本文件:%s', $fileInfo['basename'], $script));
|
|
|
|
|
|
+ vd(sprintf('[%s][%s]对应的脚本文件不存在, 脚本文件:%s', $fileName, $sheetName, $script));
|
|
// return false;
|
|
// return false;
|
|
|
|
|
|
$script = $this->defaultConfigFile;
|
|
$script = $this->defaultConfigFile;
|
|
- vd(sprintf('[%s]使用默认配置, 脚本文件:%s', $fileInfo['basename'], $script));
|
|
|
|
|
|
+ vd(sprintf('[%s][%s]使用默认配置, 脚本文件:%s', $fileName, $sheetName, $script));
|
|
}
|
|
}
|
|
|
|
|
|
// 引入脚本
|
|
// 引入脚本
|
|
include $script;
|
|
include $script;
|
|
|
|
|
|
- // 读取excel文件内容
|
|
|
|
- $sourceData = $this->getDataFromSource($this->sourceDir . self::$DS . $fileInfo['basename']);
|
|
|
|
|
|
+ // 处理excel文件内容
|
|
if (count($sourceData) < $dataLine) {
|
|
if (count($sourceData) < $dataLine) {
|
|
- vd(sprintf('[%s]文件没有数据', $fileInfo['basename']));
|
|
|
|
|
|
+ vd(sprintf('[%s][%s]文件没有数据', $fileName, $sheetName));
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -212,6 +235,11 @@ class Dump
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 主键列
|
|
|
|
+ if (!$keyColumn) {
|
|
|
|
+ $keyColumn = current($sourceData[$columnLine - 1]);
|
|
|
|
+ }
|
|
|
|
+
|
|
// 普通处理逻辑
|
|
// 普通处理逻辑
|
|
$data = [];
|
|
$data = [];
|
|
foreach ($sourceData as $k => $v) {
|
|
foreach ($sourceData as $k => $v) {
|
|
@@ -248,22 +276,19 @@ class Dump
|
|
}
|
|
}
|
|
|
|
|
|
// 额外处理逻辑
|
|
// 额外处理逻辑
|
|
- $handle = $fileInfo['filename'] . '_handle';
|
|
|
|
|
|
+ $handle = $sheetName . '_handle';
|
|
if (function_exists($handle)) {
|
|
if (function_exists($handle)) {
|
|
$data = $handle($data);
|
|
$data = $handle($data);
|
|
}
|
|
}
|
|
|
|
|
|
// 写入PHP文件
|
|
// 写入PHP文件
|
|
- $this->writePHP($fileInfo['filename'], $data);
|
|
|
|
|
|
+ $this->writePHP($sheetName, $data);
|
|
|
|
|
|
// 生成json文件
|
|
// 生成json文件
|
|
- $this->writeJSON($fileInfo['filename'], $data);
|
|
|
|
|
|
+ $this->writeJSON($sheetName, $data);
|
|
|
|
|
|
// 生成model文件
|
|
// 生成model文件
|
|
- $this->writeModel($fileInfo['filename'], $clientColumns);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return true;
|
|
|
|
|
|
+ $this->writeModel($sheetName, $clientColumns);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|