前提
C#BlazorWebassemblyを使用したアプリケーションから
Excelファイルを作成、エクスポートしたのですが開くことができません。
実現したいこと
C#BlazorWebassemblyアプリケーションからオリジナルのExcelファイルを出力し、開くことができる
発生している問題・エラーメッセージ
ファイル自体は生成できるのですが、
いざ開くときに「ファイル形式、またはファイル拡張子が正しくない」とエラーが表示され開くことができません。
該当のソースコード
C#
1/* コントローラ内のファイル生成処理を抜粋しています */ 2 3// GET: api/rk033/downloadFile/{type} 4 [HttpGet("downloadFile/{type}")] 5 public async Task<IActionResult> FileDownload(string type) 6 { 7 /* DBからデータを取得してファイルに書き出す処理 */ 8 List<seihin> result = new List<seihin>(); 9 string sql = ""; 10 11 using var transaction = _context.Database.BeginTransaction(); 12 13 try 14 { 15 //データを取得(今回は仮で帳票一覧を取得) 16 sql =insert~~; //データの取得自体は問題ないので今回は記載を省きます 17 //insert件数を取得 18 res = _context.Database.ExecuteSqlRaw(sql); 19 //getterを通じてselect処理を行う 20 result = await _context.seihin.ToListAsync(); 21 //トランザクションのコミット 22 transaction.Commit(); 23 //SQLに空白処理 24 sql = ""; 25 26 /* ファイル作成 */ 27 //ファイルを生成する 28 StreamWriter file_sample = new StreamWriter(@"C:\Users\XXX\Desktop\test.xlsb", false, Encoding.UTF8); 29 //取得したデータを書き込む 30 for(int i = 0; i < res; i++) 31 { 32 file_sample.WriteLine(result[i].code); 33 } 34 //ファイルを閉じる 35 file_sample.Close(); 36 37 } 38 catch(Exception e) 39 { 40 Console.WriteLine(e.Message); 41 } 42 43 44 /* 出力したファイルのダウンロード処理 */ 45 46 //「現在のフォルダパス」と「File」を繋いで絶対パスを作成する 47 string file = @"C:\Users\XXX\Desktop\test.xlsb"; 48 //パスに該当するファイルを開く 49 FileStream stream = new FileStream(file, FileMode.Open); 50 //ファイルをダウンロード 51 return File(stream, "application/octet-stream", "test.xlsb"); 52 }
ファイル生成に使用しているコードを載せさせていただきましたが、
現状ファイルの生成はうまくいっています。
またCSVファイル限定で、ファイルを開くこともできており、中身のデータも正しいことを確認できています。
xlsbファイル、xlsxファイルで生成、出力する方法を知りたいと考えています。
よろしくお願い致します。
試したこと
出力するファイルをcsvファイルで行うと、問題なくファイルを開くこともできました。
ただ希望はxlsbファイル、xlsxファイルで生成・出力・開くまでできるようにしたいです。
csvファイルで成功したときは、ファイルの拡張子をcsvに変更しただけでした。
補足情報(FW/ツールのバージョンなど)
VisualStudioバージョン:17.26
.NET Frameworkバージョン:4.8.04
NuGetパッケージマネージャバージョン:6.2.1
あなたの回答
tips
プレビュー