質問編集履歴
1
mts10806様の回答をもとにコードを修正し、現状の出力結果を加えました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
表題のとおりなのですが、
|
2
2
|
PhpSpreadsheetを使い新規でCSVを生成し、ダウンロードさせる際、
|
3
3
|
Excelで開いても文字化けしないSJISのCSVを作りたいと思っています。
|
4
|
+
使用しているExcelはfor Mac 2011のVersion 14.6.5。
|
4
5
|
|
5
6
|
しかしながら、どうしてもUTF8のCSVファイルしか生成されず、Excelでそのファイルを開くと日本語が文字化けしてしまいます。
|
6
7
|
|
@@ -10,14 +11,39 @@
|
|
10
11
|
```
|
11
12
|
$spreadsheet = new Spreadsheet();
|
12
13
|
|
13
|
-
$writer = new CsvWriter($
|
14
|
+
$writer = new CsvWriter($spreadsheet);
|
14
15
|
$sheet = $spreadsheet->getSheet(0);
|
15
|
-
//$dataは日本語を含む二次元配列
|
16
|
-
$sheet->fromArray($data, null, 'A1', true);
|
17
16
|
|
17
|
+
$data = [
|
18
|
+
["あああ", "aaa"],
|
19
|
+
["いいい", "iii"],
|
20
|
+
["ううう", "uuu"],
|
21
|
+
["えええ", "eee"],
|
22
|
+
["おおお", "ooo"],
|
23
|
+
];
|
24
|
+
|
18
25
|
header("Content-Type: application/octet-stream");
|
19
|
-
header("Content-Disposition: attachment; filename='
|
26
|
+
header("Content-Disposition: attachment; filename='text.csv'");
|
20
27
|
ob_end_clean();
|
21
28
|
|
29
|
+
$i = 0;
|
30
|
+
$encodedData = [];
|
31
|
+
foreach ($data as $row) {
|
32
|
+
foreach ($row as $value) {
|
33
|
+
$encodedData[$i][] = mb_convert_encoding($value, "SJIS", "UTF-8");
|
34
|
+
}
|
35
|
+
$i++;
|
36
|
+
}
|
37
|
+
|
38
|
+
$sheet->fromArray($encodedData, null, 'A1', true);
|
22
39
|
$this->writer->save('php://output');
|
23
|
-
```
|
40
|
+
```
|
41
|
+
|
42
|
+
現状の出力(日本語部分が空)
|
43
|
+
| A | B|
|
44
|
+
|:---:|:---:|
|
45
|
+
| | aaa |
|
46
|
+
| | iii |
|
47
|
+
| | uuu |
|
48
|
+
| | eee |
|
49
|
+
| | ooo |
|