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

質問編集履歴

8

解決方法

2016/09/07 07:23

投稿

shikasama
shikasama

スコア163

title CHANGED
File without changes
body CHANGED
@@ -58,4 +58,45 @@
58
58
  http://xptn.dtiblog.com/blog-entry-19.html
59
59
 
60
60
  MemoryStreamを使わずに直接ダウンロードさせたら開けました。
61
- なので、MemoryStreamにドキュメントをセーブした時点で中身が壊れてしまったものだと思われます。
61
+ なので、MemoryStreamにドキュメントをセーブした時点で中身が壊れてしまったものだと思われます。
62
+
63
+ ###解決
64
+ 以下の様にすることでメモリ上でExcelファイルの編集を行い、一時ファイルを作成することなくクライアントにダウンロードさせることができました。
65
+ ```C#
66
+ public ActionResult DownloadExcel()
67
+ {
68
+ // テンプレートファイルのパス
69
+ var templateName = Server.MapPath("~/App_Data/Template.xlsx");
70
+
71
+ // ファイルをbyte配列に変換
72
+ var byteArray = System.IO.File.ReadAllBytes(templateName);
73
+ using (MemoryStream ms = new MemoryStream())
74
+ {
75
+ /*
76
+ * MemoryStreamにbyte配列を書き込む
77
+ * MemoryStream上にExcelドキュメントができる
78
+ */
79
+ ms.Write(byteArray, 0, (int)byteArray.Length);
80
+ // MemoryStream上のExcelドキュメントを開く
81
+ using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(ms, true))
82
+ {
83
+ WorkbookPart wbPart = spreadSheet.WorkbookPart;
84
+
85
+ Sheet targetSheet = spreadSheet.WorkbookPart.Workbook.Sheets.Elements<Sheet>().First();
86
+ if (targetSheet == null)
87
+ {
88
+ return null;
89
+ }
90
+
91
+ WorksheetPart wsPart = (WorksheetPart)(wbPart.GetPartById(targetSheet.Id));
92
+
93
+ /*
94
+ * ここでいろいろExcelファイルを編集する
95
+ */
96
+
97
+ wsPart.Worksheet.Save();
98
+ }
99
+ return File(ms.ToArray(), "application/ms-excel", "ダウンロード時のファイル名.xlsx");
100
+ }
101
+ }
102
+ ```

7

追記の修正

2016/09/07 07:23

投稿

shikasama
shikasama

スコア163

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- ###ASP.NETでダウンロードさせたExcelが開けない。
1
+ ###[openXML]ASP.NETでダウンロードさせたExcelが開けない。
2
2
  Templateに追記したファイルをダウンロードさせるため、
3
3
  まず編集せずにダウンロードさせようと思いました。
4
4
  Excelの操作にはopenXMLを使用しています。

6

追記修正

2016/09/02 08:28

投稿

shikasama
shikasama

スコア163

title CHANGED
File without changes
body CHANGED
@@ -47,16 +47,15 @@
47
47
  ↓を参考にしました。
48
48
  http://xptn.dtiblog.com/blog-entry-19.html
49
49
 
50
- msが閉じていることはあまり関係ないみたいでした。
51
- http://xptn.dtiblog.com/blog-entry-19.html
52
-
53
- MemoryStreamを使わずに直接ダウンロードさせたら開けました。
54
- なので、MemoryStreamにドキュメントをセーブした時点で中身が壊れてしまったものだと思われます。
55
-
56
-
57
50
  ```C#
58
51
  wsPart.Worksheet.Save(ms);
59
52
  ms.Close();
60
53
  return File(ms.ToArray(), "application/vnd.ms-excel", "ダウンロードファイル名.xlsx");
61
54
  ```
62
- が、変わらずダウンロードしたファイルは壊れて開けませんでした。
55
+ が、変わらずダウンロードしたファイルは壊れて開けませんでした。
56
+
57
+ msが閉じていることはあまり関係ないみたいでした。
58
+ http://xptn.dtiblog.com/blog-entry-19.html
59
+
60
+ MemoryStreamを使わずに直接ダウンロードさせたら開けました。
61
+ なので、MemoryStreamにドキュメントをセーブした時点で中身が壊れてしまったものだと思われます。

5

情報の追加

2016/09/02 08:27

投稿

shikasama
shikasama

スコア163

title CHANGED
@@ -1,1 +1,1 @@
1
- ASP.NETでダウンロードさせたExcelが開けない。
1
+ [openXML]ASP.NETでダウンロードさせたExcelが開けない。
body CHANGED
@@ -47,6 +47,13 @@
47
47
  ↓を参考にしました。
48
48
  http://xptn.dtiblog.com/blog-entry-19.html
49
49
 
50
+ msが閉じていることはあまり関係ないみたいでした。
51
+ http://xptn.dtiblog.com/blog-entry-19.html
52
+
53
+ MemoryStreamを使わずに直接ダウンロードさせたら開けました。
54
+ なので、MemoryStreamにドキュメントをセーブした時点で中身が壊れてしまったものだと思われます。
55
+
56
+
50
57
  ```C#
51
58
  wsPart.Worksheet.Save(ms);
52
59
  ms.Close();

4

情報追加

2016/09/02 08:26

投稿

shikasama
shikasama

スコア163

title CHANGED
File without changes
body CHANGED
@@ -41,5 +41,15 @@
41
41
  }
42
42
  }
43
43
 
44
+ ```
44
45
  ###試したこと
45
- wsPart.Worksheet.Save(ms)したあとにmsが閉じてしまっているようです
46
+ wsPart.Worksheet.Save(ms)したあとにmsが閉じてしました
47
+ ↓を参考にしました。
48
+ http://xptn.dtiblog.com/blog-entry-19.html
49
+
50
+ ```C#
51
+ wsPart.Worksheet.Save(ms);
52
+ ms.Close();
53
+ return File(ms.ToArray(), "application/vnd.ms-excel", "ダウンロードファイル名.xlsx");
54
+ ```
55
+ が、変わらずダウンロードしたファイルは壊れて開けませんでした。

3

情報更新

2016/09/01 07:41

投稿

shikasama
shikasama

スコア163

title CHANGED
File without changes
body CHANGED
@@ -40,4 +40,6 @@
40
40
  return File(ms.ToArray(), "application/msexcel", "ダウンロードファイル名.xlsx");
41
41
  }
42
42
  }
43
+
43
- ```
44
+ ###試したこと
45
+ wsPart.Worksheet.Save(ms)したあとにmsが閉じてしまっているようです。

2

using修正

2016/09/01 07:22

投稿

shikasama
shikasama

スコア163

title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,7 @@
19
19
  {
20
20
  // xlsxドキュメントを開く。
21
21
  // 第2引数:編集するかどうか。
22
- using (SpreadsheetDocument document = SpreadsheetDocument.Open(Server.MapPath("~/App_Data/Template.xlsx"), false))
22
+ using (SpreadsheetDocument document = SpreadsheetDocument.Open(Server.MapPath("~/App_Data/Template.xlsx"), true))
23
23
  using(MemoryStream ms = new MemoryStream())
24
24
  {
25
25
  // Workbookにアクセス。

1

説明追加

2016/09/01 03:05

投稿

shikasama
shikasama

スコア163

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,7 @@
1
1
  ###ASP.NETでダウンロードさせたExcelが開けない。
2
2
  Templateに追記したファイルをダウンロードさせるため、
3
3
  まず編集せずにダウンロードさせようと思いました。
4
+ Excelの操作にはopenXMLを使用しています。
4
5
  ダウンロードはできましたが、肝心のファイルが開けませんでした。ご教示ください。
5
6
 
6
7