仕事で初めてASP.NETでVB.NETを使用しています。
テキストリンクをクリック後にテンプレートExcelファイルをコピーしてExcelにデータ出力、そしてExcelファイルをダウンロードするよくある機能を実装していますが、ブラウザでダウンロード保存したExcelファイルを開くと下の画像のメッセージが表示されます。
「はい」を押下すると「読み取れなかった内容を修復または削除することにより、ファイルを開くことができました」というメッセージが表示され、出力内容自体は問題なく出力されています。
原因も解決方法も分からないのですが、これはどう対処すれば良いのでしょうか。
ちなみに、テンプレート及び出力ファイルには入力規則が設定されていますが試しにそれを省いても解決しませんでした。
セル範囲の名前定義もありますが、そちらも省いても解決されませんでした。
また、ダウンロードして開いたExcelファイルではなくサーバ上に出力された方のExcelファイルは破損せず正常に開くことができます。
参考として細かいところを省いたコードを下記に記載致しますので、ご助力いただければ幸いです。
VB.NET
1'================================================== 2'asapxA.aspx(呼び出し元) 3'================================================== 4<a runat="server" id="linkDL" name="linkDL" href="#dummy" onclick="return linkDL_Click"> 5 Download 6</a> 7'// [javaScript] 8function linkDl_Click(){ 9 var returnVal = window.showModalDialog( 10 "aspxB.aspx", "_self" 11 ); 12 13 '// 取得データが有る場合 14 if(typeof returnVal != 'undefind' && returnVal != '' { 15 window.open('DownLoad.aspx?path=' + returnVal, 'DownLoad'); 16 } 17 return false; 18} 19 20 21'================================================== 22'aspxB.aspx 23'================================================== 24'// JavaScript 25function funcOnLoad() { 26 window.returnValue = document.getElementById("hdn_DownloadPath").value; 27 window.close(); 28} 29 30<body onload="funcOnLoad()"> 31 <form id="aspxB" runat="server"> 32 <asp:HiddenField runat="server" ID="hdn_DownloadPath"> 33 </form> 34</body> 35 36 37'-------------------------------------------------- 38'aspxB.aspx.vb(aspxB.aspxから呼び出される) 39'-------------------------------------------------- 40Dim strNewName As string '// 出力ファイル名 41Dim strTempPath As string '// テンプレートパス 42Dim strOutputPath As string '// 出力先パス 43Dim xlApp As Excel.Application 44Dim wkBook As Excel.WorkBook 45Dim wkSheet As Excel.WorkSheet 46 47' [代入記述省略] 48 49System.IO.File.Copy(strTempPath,strOutputPath) 50xlApp = CreateObject("Excel.Application") 51wkBook = xlApp.WorkBooks.Open(strOutputPath) 52wkSheet = wkBook.WorkSheets("Sheet1") '// 実際は名前設定済の9シートが存在しています 53 54' [DBデータ取得(処理詳細省略)] 55' [指定シート、指定セルへデータを出力(処理詳細省略)] 56' [入力規則の設定(処理詳細省略)] 57 58System.Runtie.InteropServices.Marshal.ReleaseComObject(wkSheet) 59wkBook.Close(SaveChanges:=True) 60System.Runtie.InteropServices.Marshal.ReleaseComObject(wkBook) 61System.Runtie.InteropServices.Marshal.ReleaseComObject(xlApp) 62wkSheet = Nothing 63wkBook = Nothing 64xlApp = Nothing 65GC.Collect() 66Me.hdn_DownloadPath.Value = newFileName 67 68 69'================================================== 70'DownLoad.aspx 71'================================================== 72Dim strDownloadPath As string 73 74strDownloadPath = Request.Querystring("path") 75 76'//Excel返却処理 77Response.Buffer = turue 78Response.ContentType = "application/octet.stream" 79 '// ContentTypeは下記2つも試し済み 80 '// application/vnd.ms-excel 81 '// application/msexcel 82Response.ContentEncoding = Encoding.GetEncoding("UTF-8") 83Response.AddHeader("content-disposition", "attachement;filename=" + strDownloadPath) 84Response.TransmitFile([出力先パス] + strDownloadPath) 85Response.Flush()
追記・修正:
コードの抜き出すべき所が分かっておりませんでした。
コード記載を修正したのでご参照いただけると幸いです。
お客様の要望、また作業場所の環境など諸事情で他ツール等の使用はできません。
この条件だと、[.xlsx]のままでExcelファイルダウンロードはできないのでしょうか?
宜しくお願い致します。

回答3件
あなたの回答
tips
プレビュー