none
請問如何將不同的GridView匯出到不同的EXCEL sheet中 RRS feed

  • 問題

  • VS 2008 + C#
    我原本是使用
            System.IO.StringWriter sw = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
    
            Response.Clear();
            Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xls");
            Response.ContentType = "application/vnd.ms-excel";
    
            GridView1.RenderControl(hw);
            Response.Write(sw.ToString());
            Response.End();
    來匯出EXCEL檔案,但一次只能匯出一個GridView在一個sheet中,想請問大家如何將不同的GridView匯出在不同的sheet中,感謝
    2009年8月20日 上午 06:27

解答

  • 這要輸出成 MIME 格式才可以,你可以測試將下面內容存成 sheets.xls ,再用 Excel 開,確認後讓 asp.net 輸出成下面的內容:
    MIME-Version: 1.0
    X-Document-Type: Workbook
    Content-Type: multipart/related; boundary="----=BOUNDARY_MSDN"

    ------=BOUNDARY_MSDN
    Content-Type: text/html; charset="big5"

    <html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel">

    <head>
    <xml>
     <o:DocumentProperties>
      <o:Author>心冷熱情熄</o:Author>
      <o:LastAuthor>心冷熱情熄</o:LastAuthor>
      <o:Created>2007-07-10T17:02:17Z</o:Created>
      <o:LastSaved>2007-07-10T17:06:05Z</o:LastSaved>
      <o:Company>MSDN</o:Company>
      <o:Version>11.5606</o:Version>
     </o:DocumentProperties>
    </xml>
    <xml>
     <x:ExcelWorkbook>
      <x:ExcelWorksheets>
       <x:ExcelWorksheet>
        <x:Name>表1</x:Name>
        <x:WorksheetSource HRef="cid:sheet01"/>
       </x:ExcelWorksheet>
       <x:ExcelWorksheet>
        <x:Name>表2</x:Name>
        <x:WorksheetSource HRef="cid:sheet02"/>
       </x:ExcelWorksheet>
      </x:ExcelWorksheets>
     </x:ExcelWorkbook>
    </xml>
    </head>
    </html>

    ------=BOUNDARY_MSDN
    Content-ID: sheet01
    Content-Type: text/html; charset="big5"

    <html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel">

    <head>
    <xml>
     <x:WorksheetOptions>
      <x:ProtectContents>False</x:ProtectContents>
      <x:ProtectObjects>False</x:ProtectObjects>
      <x:ProtectScenarios>False</x:ProtectScenarios>
     </x:WorksheetOptions>
    </xml>
    </head>
    <body>
    <table>
     <tr>
      <td>1</td>
     </tr>
     <tr>
      <td>a2</td>
     </tr>
     </table>
    </body>
    </html>

    ------=BOUNDARY_MSDN
    Content-ID: sheet02
    Content-Type: text/html; charset="big5"

    <html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel">

    <head>
    <xml>
     <x:WorksheetOptions>
      <x:ProtectContents>False</x:ProtectContents>
      <x:ProtectObjects>False</x:ProtectObjects>
      <x:ProtectScenarios>False</x:ProtectScenarios>
     </x:WorksheetOptions>
    </xml>
    </head>
    <body>
    <table>
     <tr>
      <td>a1</td>
      <td>2</td>
     </tr>
     <tr>
      <td>a2</td>
      <td>b2</td>
     </tr>
     </table>
    </body>
    </html>

    ------=BOUNDARY_MSDN--


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已提議為解答 Lolota Lee 2009年8月25日 上午 05:22
    • 已標示為解答 Lolota Lee 2009年8月26日 上午 07:14
    • 已取消標示為解答 學習者 2009年8月26日 上午 07:48
    • 已標示為解答 Lolota Lee 2009年8月28日 上午 01:07
    2009年8月20日 上午 08:16

所有回覆

  • 這要輸出成 MIME 格式才可以,你可以測試將下面內容存成 sheets.xls ,再用 Excel 開,確認後讓 asp.net 輸出成下面的內容:
    MIME-Version: 1.0
    X-Document-Type: Workbook
    Content-Type: multipart/related; boundary="----=BOUNDARY_MSDN"

    ------=BOUNDARY_MSDN
    Content-Type: text/html; charset="big5"

    <html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel">

    <head>
    <xml>
     <o:DocumentProperties>
      <o:Author>心冷熱情熄</o:Author>
      <o:LastAuthor>心冷熱情熄</o:LastAuthor>
      <o:Created>2007-07-10T17:02:17Z</o:Created>
      <o:LastSaved>2007-07-10T17:06:05Z</o:LastSaved>
      <o:Company>MSDN</o:Company>
      <o:Version>11.5606</o:Version>
     </o:DocumentProperties>
    </xml>
    <xml>
     <x:ExcelWorkbook>
      <x:ExcelWorksheets>
       <x:ExcelWorksheet>
        <x:Name>表1</x:Name>
        <x:WorksheetSource HRef="cid:sheet01"/>
       </x:ExcelWorksheet>
       <x:ExcelWorksheet>
        <x:Name>表2</x:Name>
        <x:WorksheetSource HRef="cid:sheet02"/>
       </x:ExcelWorksheet>
      </x:ExcelWorksheets>
     </x:ExcelWorkbook>
    </xml>
    </head>
    </html>

    ------=BOUNDARY_MSDN
    Content-ID: sheet01
    Content-Type: text/html; charset="big5"

    <html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel">

    <head>
    <xml>
     <x:WorksheetOptions>
      <x:ProtectContents>False</x:ProtectContents>
      <x:ProtectObjects>False</x:ProtectObjects>
      <x:ProtectScenarios>False</x:ProtectScenarios>
     </x:WorksheetOptions>
    </xml>
    </head>
    <body>
    <table>
     <tr>
      <td>1</td>
     </tr>
     <tr>
      <td>a2</td>
     </tr>
     </table>
    </body>
    </html>

    ------=BOUNDARY_MSDN
    Content-ID: sheet02
    Content-Type: text/html; charset="big5"

    <html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel">

    <head>
    <xml>
     <x:WorksheetOptions>
      <x:ProtectContents>False</x:ProtectContents>
      <x:ProtectObjects>False</x:ProtectObjects>
      <x:ProtectScenarios>False</x:ProtectScenarios>
     </x:WorksheetOptions>
    </xml>
    </head>
    <body>
    <table>
     <tr>
      <td>a1</td>
      <td>2</td>
     </tr>
     <tr>
      <td>a2</td>
      <td>b2</td>
     </tr>
     </table>
    </body>
    </html>

    ------=BOUNDARY_MSDN--


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已提議為解答 Lolota Lee 2009年8月25日 上午 05:22
    • 已標示為解答 Lolota Lee 2009年8月26日 上午 07:14
    • 已取消標示為解答 學習者 2009年8月26日 上午 07:48
    • 已標示為解答 Lolota Lee 2009年8月28日 上午 01:07
    2009年8月20日 上午 08:16
  • Hi,

    這個問題您解出來了嗎?

    您要匯出到不同的Sheet就是要follow這樣的格式去實作. 您有嘗試過存成excel檔案了嗎?


    B.R.
    Lolota

    年度軟體技術盛會微軟Tech.Days 9月22日全新登場, 您還在等什麼? 快報名就對了.


    2009年8月28日 上午 01:06
  • 感謝「心冷熱情熄」及「Lolota Lee」

    我知道使用MIME 格式是可以將資料寫入不同的sheet中,但是當我資料量龐大的時候,整各校能會很差

    我想要匯出的資料約4萬多筆,還在持續成長中,使用MIME 格式匯出需要1個半小時左右,但是用GridView
    的方式只要3分鐘,但不能將不同的GridView寫到不同的sheet,再請大家指導了
    2009年8月28日 上午 02:12
  • Hi,

    您可以試看看Automation, 不過微軟這邊不建議用在ASP.NET上, 有時會有一些不能預期的例外發生:
    http://www.c-sharpcorner.com/Blogs/BlogDetail.aspx?BlogId=283

    http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/5f81acfc-b1f3-4ecb-853f-e576839c37dc/

    年度軟體技術盛會微軟Tech.Days 9月22日全新登場, 您還在等什麼? 快報名就對了.


    2009年8月28日 上午 02:24
  • 你是用 StringBuilder 整理還是直接字串相加?直接字串相加所需時間會呈指數倍增加,請改用 StringBuilder ...
    4 萬多筆沒很多,不過大量資料,我比較偏向輸出 csv ,多輸出幾個檔,server 每次要輸出 4 萬多筆,有點不切實際,建議你把邏輯與規劃說出來,包含存取時距、人數等,看看可以怎樣改善。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年8月28日 上午 06:42