#php #laravel #maatwebsite-excel
#php #laravel #веб-сайт maatwebsite-excel
Вопрос:
Я просто хотел найти способ преобразовать математическое выражение в строку. Существует множество решений для преобразования строки в математическую форму или вычисления математического выражения внутри строки, но нет ни одного решения для моей проблемы.
$math_expression = 10/24/2020;
$result = strval($math_expression);
echo $result;
Вывод:
0.00020627062706271
Я также пробовал
(string)$math_expression
Но результат тот же 0.00020627062706271
.
Я хочу , чтобы результат был '10/24/2020'
таким .
Вот функция контроллера:
public function importScores(Request $request)
{
$fileName = time() . '.' . $request->file->getClientOriginalExtension();
$request->file->move(storage_path('upload'), $fileName);
$filePath = storage_path('upload/' . $fileName);
Excel::import(new ScoresImport, $filePath);
$scores = Score::all();
return response()->json(['scores' => $scores, 'request' => $filePath], 200);
}
Вот класс ScoresImport:
<?php
namespace AppImports;
use AppModelsScore;
use CarbonCarbon;
use IlluminateSupportCollection;
use MaatwebsiteExcelConcernsToCollection;
class ScoresImport implements ToCollection
{
public function collection(Collection $rows)
{
foreach ($rows as $key => $row) {
if ($key > 0) {
Score::create([
'user_id' => $row[0],
'result' => $row[1],
'grade_date' => Carbon::createFromFormat('m/d/Y', $row[2])->format('m/d/Y'), //Coming from excel file in 11/23/2020 MM/dd/yyy format
// 'grade_date' => $row[2], // I also tried as this and with (string)$row[2] amp;amp; strval($row[2])
'ie' => $row[3]
]);
}
}
}
public function chunkSize(): int
{
return 1000;
}
public function batchSize(): int
{
return 1000;
}
}
Комментарии:
1. Обведите его кавычками.
"10/24/2020"
.2. В фактическом коде 10/24/2020 происходит из файла Excel, который будет загружен пользователем, поэтому нельзя просто заключать его в кавычки.
3. Тогда вам не нужно ничего делать. При извлечении это уже будет строка.
4. Нет, это не так, поэтому я ищу решение.
5. Можете ли вы показать код, который считывает значение из файла?
Ответ №1:
Ну, я не думаю, что это имеет отношение к PHP, поскольку все математические операции будут вычисляться при любых обстоятельствах.
Я не использовал упомянутый вами пакет. Но, просто просмотрев их код, я понял, что он использует другой пакет под названием «PHPOffice PhpSpreadsheet» в качестве зависимости. В пакете есть функция с именем excelToDateTimeObject, которая, я думаю, поможет вам решить проблему.
Итак, если я предполагаю, что вы используете версию: 3.1 Laravel-Excel, ваш контроллер будет выглядеть примерно так:
<?php
// ...
use PhpOfficePhpSpreadsheetSharedDate;
class ScoresImport implements ToCollection
{
public function collection(Collection $rows)
{
foreach ($rows as $key => $row) {
if ($key > 0) {
$phpDateObject = Date::excelToDateTimeObject($row[2]);
$gradeDateToCreate = Carbon::instance($phpDateObject)->format('m/d/Y');
Score::create([
'user_id' => $row[0],
'result' => $row[1],
'grade_date' => $gradeDateToCreate,
'ie' => $row[3]
]);
}
}
}
// ...
}
Ответ №2:
Я думаю, что это невозможно, если вы не импортируете данные в виде строки, поскольку переменная сохраняет импортируемое вами значение, она уже вычисляет значение.
Возможно, вам следует использовать функцию КОНКАТЕНАЦИИ в Excel, чтобы добавлять кавычки до и после вашего выражения.