Excel 2008 не может разобрать HTML - PullRequest
0 голосов
/ 05 марта 2010

Мне нужно экспортировать gridView в Excel, я помещаю HTML-код возврата из gridview в HtmlTextWriter и помещаю его в ответ.

Файл результатов работает отлично в Excel, Excel может анализировать HTMLи результат читабелен, отлично работает в Excel 2003 и 2007, но на некоторых машинах с Excel 2008 (MACOS) Excel показывает только необработанный HTML-код и не может обработать этот HTML-код.

Любая идея для настройкиExcel?

Это код для преобразования:

public static void ToExcel(GridView gridView, string fileName)
{
    HttpResponse response = HttpContext.Current.Response;
    response.Clear();
    response.Buffer = true;

    fileName = fileName.Replace(".xls", string.Empty) + ".xls";

    response.AddHeader("content-disposition",
                       "attachment;filename=" + fileName);
    response.Charset = "";
    response.ContentEncoding = Encoding.Unicode;
    response.BinaryWrite(Encoding.Unicode.GetPreamble());
    response.ContentType = MimeTypes.GetContentType(fileName);

    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    gridView.AllowPaging = false;
    //gridView.DataBind();

    //Change the Header Row back to white color
    gridView.HeaderRow.Style.Add("background-color", "#FFFFFF");

    //Apply style to Individual Cells
    for (int i = 0; i < gridView.HeaderRow.Cells.Count; i++)
    {
        gridView.HeaderRow.Cells[i].Style.Add("background-color", "yellow");    
    }

    for (int i = 0; i < gridView.Rows.Count; i++)
    {
        GridViewRow row = gridView.Rows[i];

        //Change Color back to white
        row.BackColor = System.Drawing.Color.White;

        //Apply text style to each Row
        row.Attributes.Add("class", "textmode");

        //Apply style to Individual Cells of Alternating Row
        if (i % 2 != 0)
        {
            for (int j = 0; j < row.Cells.Count; j++)
            {
                row.Cells[j].Style.Add("background-color", "#C2D69B");
            }
        }
    }

    gridView.RenderControl(hw);

    //style to format numbers to string
    string style = @"<style> .textmode { mso-number-format:\@; } </style>";
    response.Write(style);
    response.Output.Write(sw.ToString());
    response.Flush();
    response.End(); 
}

Ответы [ 3 ]

0 голосов
/ 05 марта 2010

Excel 2008 для Mac не имеет VBA. Я не знаю, как работают надстройки C # (я предполагаю, что это именно так), если нет среды VBA. Я знаю, что для моих файлов VBA и надстроек ничего нельзя сделать.

0 голосов
/ 29 марта 2010

В общем, использование Excel разбора вашего HTML очень хрупкое. Как вы обнаружили, версия Excel для Mac может иметь проблемы с этим. Вместо этого вам следует рассмотреть возможность использования Spreadsheet XML или механизма, подобного NPOI, для создания реального файла Excel.

При использовании HTML-документа или XML-документа Excel при загрузке из Интернета выдает пользователю предупреждение о том, что файл не соответствует ожидаемому типу (например, у вас есть Html-файл, претендующий на статус файла Excel на основе типа контента.). Если вы создадите настоящий файл Excel, у вас не будет проблем с совместимостью, и пользователи не получат это предупреждение.

Электронная таблица XML

NPOI

0 голосов
/ 05 марта 2010

Хм, вы могли бы сделать что-то вроде ...

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=report.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.xls";
        var stringWrite = new System.IO.StringWriter();
        var htmlWrite = new HtmlTextWriter(stringWrite);
        this.gridView.RenderControl(htmlWrite);
        Response.Write(stringWrite.ToString());
        Response.End();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...