質問するログイン新規登録

質問編集履歴

1

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

2018/04/17 02:41

投稿

yukkenoottuna
yukkenoottuna

スコア51

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($this->spreadsheet);
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='$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 |