生成Excel文件错误

时间:2009-09-05 13:47:14

标签: .net excel iis iis-7 asp-classic

我在经典ASP中使用以下代码生成Excel文件,代码很简单并且有效。我在Windows Vista x86上的IIS 7.0下运行代码。两个问题,

  1. 有一个奇怪的警告框,这里是屏幕快照
  2. http://i27.tinypic.com/2n81udw.jpg

    1. 所有单元格的背景都是白色,每个单元格没有边框,这里是屏幕快照,
    2. http://i25.tinypic.com/vy5t2d.jpg

      我的代码,

      <%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
      <%
      
      function writeXlsHttpHeaders(filename){
          Response.ContentType = "application/vnd.ms-excel";
          Response.Charset = "utf-8";
          Response.AddHeader("Content-Disposition", 
                  "attachment; filename="+filename+".xls");
      }
      
      function getXlsStart(){
          return ""
          + "<html>\n"
          + "<head>\n"
          + "<meta http-equiv=\"Content-Type\" "
          + "content=\"text/html; charset=UTF-8\">\n"
          + "<style type=\"text/css\">\n"
          + "html, body, table {\n"
          + "    margin: 0;\n"
          + "    padding: 0;\n"
          + "    font-size: 11pt;\n"
          + "}\n"
          + "table, th, td { \n"
          + "    border: 0.1pt solid #D0D7E5;\n"
          + "    border-collapse: collapse;\n"
          + "    border-spacing: 0;\n"
          + "}\n"
          + "</style>\n"
          + "</head>\n"
          + "<body>\n"
          + "<table>\n"
          + "";
      }
      
      function getXlsEnd(){
          return ""
          + "</table>\n"
          + "</body>\n"
          + "</html>"
          + "";
      }
      
      function xlsEscape(val){
          if (typeof val === "number") {
              return val.toString(10).replace(".", ",");
          } else if (typeof val === "string") {
              return Server.HTMLEncode(val);
          } else if (val === null)  {
              return "#NULL#";
          } else if (val === undefined)  {
              return "#UNDEFINED#";
          } else {
              return "#ERROR#";
          }
      }
      
      function writeXls(filename, data, columnCount){
          writeXlsHttpHeaders(filename);
          Response.Write(getXlsStart());
          var columnCount = 2;
          for (var i=0, il=10; i<il; i+=columnCount) {
              Response.Write("<tr>");
              for (var j=0; j<columnCount; j++) {
                  Response.Write("<td>");
                  Response.Write(xlsEscape("Data"));
                  Response.Write("</td>");
              }
              Response.Write("</tr>\n");
              // prevent Response Buffering Limit Exceeded
              if (i % 1000 === 0) {
                  Response.Flush();
              }
          }
          Response.Write(getXlsEnd());
      }
      
      function main(){
          var filetype = Request.QueryString("filetype")();
          var filename = "filename";
      
          Response.Clear();
          writeXls(filename);
          Response.End();
      }
      
      main();
      
      %>
      

      任何解决方案?

      提前谢谢, 乔治

1 个答案:

答案 0 :(得分:3)

A。有一个奇怪的警告框......

您正在提供HTML,文件扩展名设置为xls。这是在过去一年左右推出的安全违规行为。将扩展名更改为htm是否会避免安全提示?

B。因为您的HTML表格只包含两列和五行。没有其他“细胞”,所以没有边界。为了避免这种情况,我很确定您需要提供CVS,Workbook XML或“其他”。 (在我看来,我喜欢没有边界,但大多数人没有。)

C。 ... Windows Vista x86上IIS 7.0下的代码...

这是一个Excel和安全问题,与IIS或Windows无关。

D。抱歉,我没有给你一个具体的答案,因为过去几年我一直在使用Syncfusion 3.0。它提供了正确的Excel格式的工作簿,没有任何问题。