Я столкнулся с точно такой же проблемой в начале прошлого года. В конце концов мне удалось взломать мой путь к автоматическому созданию файла Excel .xlt с несколькими электронными таблицами (которые фактически являются веб-страницами), которые могут быть приняты Excel.
Я знаю, что это не красиво, но у меня это сработало. Если вы решите попробовать, дайте мне знать, работает ли он и у вас.
Выведите следующее (вы можете настроить любое количество листов):
MIME-Version: 1.0
X-Document-Type: Workbook
Content-Type: multipart/related; boundary="----=_NextPart_01CB53EC.0FFDF540"
------=_NextPart_01CB53EC.0FFDF540
Content-Location: file:///C:/CE594991/Book1.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=utf-8"
<html xmlns:v=3D"urn:schemas-microsoft-com:vml"
xmlns:o=3D"urn:schemas-microsoft-com:office:office"
xmlns:x=3D"urn:schemas-microsoft-com:office:excel"
xmlns=3D"http://www.w3.org/TR/REC-html40">
<head>
<link id=3D"shLink" href=3D"Book1_files/Sheet1.htm">
<link id=3D"shLink" href=3D"Book1_files/Sheet2.htm">
<link id=3D"shLink" href=3D"Book1_files/Sheet3.htm">
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>Sheet1</x:Name>
<x:WorksheetSource HRef=3D"Book1_files/Sheet1.htm"/>
</x:ExcelWorksheet>
<x:ExcelWorksheet>
<x:Name>Sheet2</x:Name>
<x:WorksheetSource HRef=3D"Book1_files/Sheet2.htm"/>
</x:ExcelWorksheet>
<x:ExcelWorksheet>
<x:Name>Sheet3</x:Name>
<x:WorksheetSource HRef=3D"Book1_files/Sheet3.htm"/>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
</head>
</html>
Для каждой страницы выведите:
------=_NextPart_01CB53EC.0FFDF540
Content-Location: file:///C:/CE594991/Book1_files/{ your sheet name }".htm
Content-Type: text/html; charset=utf-8
<html>
{ your stuffs }
</html>
Конец цикла
------=_NextPart_01CB53EC.0FFDF540
Content-Location: file:///C:/CE594991/Book1_files/filelist.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/xml; charset="utf-8"
<xml xmlns:o=3D"urn:schemas-microsoft-com:office:office">
<o:MainFile HRef=3D"../Book1.htm"/>
<o:File HRef=3D"Sheet1.htm"/>
<o:File HRef=3D"Sheet2.htm"/>
<o:File HRef=3D"Sheet3.htm"/>
</xml>
------=_NextPart_01CB53EC.0FFDF540--
В вашем коде установите для буфера ответа значение false, тип содержимого - «application / vnd.ms-excel» и добавьте заголовок «Content-Disposition», «inline; filename = {имя вашего файла}». Обратите внимание, что перед первой строкой вашего выходного файла не должно быть разрывов строк.