質問編集履歴

1

mts10806様の回答をもとにコードを修正し、現状の出力結果を加えました。

2018/04/17 02:41

投稿

yukkenoottuna
yukkenoottuna

スコア51

test CHANGED
File without changes
test CHANGED
@@ -3,6 +3,8 @@
3
3
  PhpSpreadsheetを使い新規でCSVを生成し、ダウンロードさせる際、
4
4
 
5
5
  Excelで開いても文字化けしないSJISのCSVを作りたいと思っています。
6
+
7
+ 使用しているExcelはfor Mac 2011のVersion 14.6.5。
6
8
 
7
9
 
8
10
 
@@ -22,24 +24,74 @@
22
24
 
23
25
 
24
26
 
25
- $writer = new CsvWriter($this->spreadsheet);
27
+ $writer = new CsvWriter($spreadsheet);
26
28
 
27
29
  $sheet = $spreadsheet->getSheet(0);
28
30
 
29
- //$dataは日本語を含む二次元配列
30
31
 
32
+
33
+ $data = [
34
+
31
- $sheet->fromArray($data, null, 'A1', true);
35
+ ["あああ", "aaa"],
36
+
37
+ ["いいい", "iii"],
38
+
39
+ ["ううう", "uuu"],
40
+
41
+ ["えええ", "eee"],
42
+
43
+ ["おおお", "ooo"],
44
+
45
+ ];
32
46
 
33
47
 
34
48
 
35
49
  header("Content-Type: application/octet-stream");
36
50
 
37
- header("Content-Disposition: attachment; filename='$fileName'");
51
+ header("Content-Disposition: attachment; filename='text.csv'");
38
52
 
39
53
  ob_end_clean();
40
54
 
41
55
 
42
56
 
57
+ $i = 0;
58
+
59
+ $encodedData = [];
60
+
61
+ foreach ($data as $row) {
62
+
63
+ foreach ($row as $value) {
64
+
65
+ $encodedData[$i][] = mb_convert_encoding($value, "SJIS", "UTF-8");
66
+
67
+ }
68
+
69
+ $i++;
70
+
71
+ }
72
+
73
+
74
+
75
+ $sheet->fromArray($encodedData, null, 'A1', true);
76
+
43
77
  $this->writer->save('php://output');
44
78
 
45
79
  ```
80
+
81
+
82
+
83
+ 現状の出力(日本語部分が空)
84
+
85
+ | A | B|
86
+
87
+ |:---:|:---:|
88
+
89
+ | | aaa |
90
+
91
+ | | iii |
92
+
93
+ | | uuu |
94
+
95
+ | | eee |
96
+
97
+ | | ooo |