PhpSpreadsheet에서 텍스트 파일(csv,txt) 로드
17368 단어 PhpSpreadsheetlaravel5.5
그리고 초보자 전용입니다. 실수가있을 수 있으므로 지적하십시오.
환경
version 확인의 커맨드는 뭐야···? 좋기 때문에 글쓰기
php -v
composer show
php artisan --version
텍스트 파일 로드
준비한 것은 메모장 텍스트 파일.
읽는 파일 유형이 텍스트 파일로 알려져 있으므로 csv 유형의 reader 객체를 인스턴스화하고 파일을 spreadsheet 객체로 읽습니다.
컨트롤러
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
$spreadsheet = $reader->load($filePath);
나는 view로부터 파일을 보내고 있었으므로 파일 패스는 이하와 같은 형태로 받고 있다
컨트롤러
$filePath = request()->file('fileName');
로드 옵션
파일 형식에주의
Note that\PhpOffice\PhpSpreadsheet\Reader\Csv by default assumes that the loaded CSV file is UTF-8 encoded.
(기본적으로\PhpOffice\PhpSpreadsheet\Reader\Csv는 로드된 CSV 파일이 UTF-8로 인코딩되어 있다고 가정합니다.)
읽기 텍스트 파일이 'SJIS'인데! 그렇다면 인스턴스화 한 후에
컨트롤러
$reader->setInputEncoding('SJIS');
그러면 문자도 제대로 읽어줍니다.
기타 다양한 설정 가능. 자세한 내용은 공식 문서를 참조하십시오.
데이터 저장
읽은 시트에서 데이터를 좋은 느낌으로 저장
컨트롤러
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
$sheet = $spreadsheet->getSheet(0);
// rowとcolのデータ領域を確認
$rowMax = $sheet->getHighestRow();
$colMaxStr = $sheet->getHighestColumn();
$colMax = Coordinate::columnIndexFromString($colMaxStr);
// 1セルごとにテキストデータを取得
$sheetData = [ ];
for($r = 1; $r <= $rowMax; $r ++) {
for($c = 1; $c <= $colMax; $c ++) {
$cell = $sheet->getCellByColumnAndRow($c, $r);
$sheetData[$r][$c] = $cell->getValue();
}
}
이제는 이 방법으로만 데이터를 저장하는 방법을 알지 못했기 때문에 다른 좋은 방법이 있다면 알려주세요.
(추기) 이런 까다로운 방법 하지 않아도 1행으로 배열로 하는 방법 있었다.
컨트롤러
$sheetData = $spreadsheet->getActiveSheet()->toArray();
출력되는 배열은 for 문을 돌리는 방법과 같습니다. 단연 이쪽이 편해! ! ! ! !
toArray 메소드의 인수는 전부 4개, 거의 데포로 좋다고 생각합니다.
Worksheet.php
/**
* Create array from worksheet.
* @param mixed $nullValue セルが存在しない場合、配列エントリに返される値
* @param bool $calculateFormulas 数式を計算すべきか?
* @param bool $formatData Should セル値に書式を適用する必要があるか?
* @param bool $returnCellRef False - 0から数えてカウントされる行と列の単純な配列を返します
* True - 実際の行IDと列IDによってインデックスされた行と列を返します
*
* @return array
*/
public function toArray($nullValue = null, $calculateFormulas = true, $formatData = true, $returnCellRef = false)
{
// Garbage collect...
$this->garbageCollect();
// Identify the range that we need to extract from the worksheet
$maxCol = $this->getHighestColumn();
$maxRow = $this->getHighestRow();
// Return
return $this->rangeToArray('A1:' . $maxCol . $maxRow, $nullValue, $calculateFormulas, $formatData, $returnCellRef);
}
$sheetData의 내용은
덤프
array:10 [▼
1 => array:7 [▼
1 => "FF"
2 => "1987年"
3 => "FC"
4 => "wol"
5 => "カオス"
6 => "とくれせんたぼーび"
7 => null
]
2 => array:7 [▼
1 => "FF2"
2 => "1988年"
3 => "FC"
4 => "フリオニール"
5 => "パラメキア帝国初代皇帝"
6 => "……ゴクッ……"
7 => null
]
3 => array:7 [▼
1 => "FF3"
2 => "1990年"
3 => "FC"
4 => "オニオンナイトorルーネス"
5 => "暗闇の雲"
6 => "ファファファ…"
7 => null
]
4 => array:7 [▼
1 => "FF4"
2 => "1991年"
3 => "SF"
4 => "セシル"
5 => "ゼロムス"
6 => "いいですとも!"
7 => null
]
5 => array:7 [▼
1 => "FF5"
2 => "1992年"
3 => "SF"
4 => "バッツ"
5 => "ネオエクスデス"
6 => "ボコ、行ってくる!"
7 => null
]
6 => array:7 [▼
1 => "FF6"
2 => "1994年"
3 => "SF"
4 => "ティナ"
5 => "ケフカ"
6 => "命、夢、希望、どこから来て どこへ行く?そんなものは、この私がハカイする!"
7 => null
]
7 => array:7 [▼
1 => "FF7"
2 => "1997年"
3 => "PS"
4 => "クラウド"
5 => "セフィロス"
6 => "興味ないね"
7 => null
]
8 => array:7 [▼
1 => "FF8"
2 => "1999年"
3 => "PS"
4 => "スコール"
5 => "アルティミシア"
6 => "壁にでも話してろよ"
7 => null
]
9 => array:7 [▼
1 => "FF9"
2 => "2000年"
3 => "PS"
4 => "ジタン"
5 => "ペプシマン"
6 => "誰かを助けるのに理由がいるかい?"
7 => null
]
10 => array:7 [▼
1 => "FF7"
2 => "2001年"
3 => "PS2"
4 => "ティーダ"
5 => "シン"
6 => "泣くぞ。すぐ泣くぞ。絶対泣くぞ。ほら泣くぞ。"
7 => null
]
]
왜 마지막으로 null이 들어오는지는 조사중입니다.
이런 느낌으로 읽을 수 있었기 때문에 나머지는 이 녀석을 DB 보존하게 되고 끓여지고 구워져 자유롭게.
Reference
이 문제에 관하여(PhpSpreadsheet에서 텍스트 파일(csv,txt) 로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuiqiiii/items/faa4d2e6fe2681dffd1a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)