mso数据放置:同一单元格不工作

本文关键字:单元格 工作 数据 mso | 更新日期: 2023-09-27 18:30:10

我正在从网页将数据导出到Excel中。这应该很容易,但数据中有<p>标签。这会导致Excel在数据应全部位于同一单元格中时创建新行。经过一些研究,我发现mso数据放置应该起作用,但它不起作用。Excel打开,显示数据,但会创建额外的不必要行。这是我用来导出数据的代码:

protected void doexcel()
  {
      string style =  @"<style type='text/css'>P {mso-data-placement:same-cell; font-weight:bold;}</style>";

    HttpResponse response = HttpContext.Current.Response;
    // first let's clean up the response.object
    response.Clear();
    response.Charset = "";
    //set the response mime type for excel
    response.ContentType = "application/vnd.ms-excel";
    Random RandomClass = new Random();
    int RandomNumber = RandomClass.Next();
    String filename = "a" + RandomNumber + DateTime.Now + ".xls";
    response.AddHeader("Content-Disposition", "attachment;filename='"" + filename + "'"" );
    // create a string writer
    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter htw = new HtmlTextWriter(sw))
        {
      HttpContext.Current.Response.Write(style);
            SqlDataSourceEmployeeAssets.ConnectionString =   MyObjects.Application.CurrentContext.ConnectionString;
            String sql = (string)Session["sql"];
            SqlDataSourceEmployeeAssets.SelectCommand = sql;
            // lCount.Text = "Query returned " + getCount(query) + " rows.";
            DataGrid dge = new DataGrid();
            dge.DataSource = SqlDataSourceEmployeeAssets;
            dge.DataBind();
            dge.RenderControl(htw);
            response.Write(sw.ToString());
            response.End();
        }
    }
}

这是数据库中让我感到悲伤的原始数据的一个例子:

<P>4/13/2011 : Cheng  "Jonathan" Vaing is with BSES Graffiti Unit.</P><P>4/13/2011 : Cheng  "Jonathan" Vaing is with</P>

建议?


我尝试了其他一些东西

  1. 我直接进入数据,并在内联的段落标记中添加了mso-data-placement属性。还是没用。数据如下

<P style="mso-data-placement:same-cell> my data </p>

  1. 我尝试了其他mso-*属性,但也不起作用。例如,我将样式表更改为如下

<style type='text/css'>P {mso-highlight:yellow}</style>";

为什么Excel不能识别我的mso-*属性?!?!

mso数据放置:同一单元格不工作

有一个解决方案,但它不是干净的。

在边缘之后。DataBind,放置以下代码。这将对每个单元格的文本进行编码

 foreach (DataGridItem dgi in dge.Items)
 {                
      foreach (TableCell cell in dgi.Cells)
      {
           cell.Text = WebUtility.HtmlEncode(cell.Text);;
      }
 }        

打开Excel文件时,应在一个单元格中显示带有标记的原始数据。

我发现这是有效的,因为Excel实际上也对文本进行了编码。要查看Excel的实际操作,请执行以下操作:

  1. 在Excel中创建新工作簿(我使用的是Office 2013)
  2. 在第一个单元格中,粘贴原始数据(显示时)。请先按F2键(插入单元格),然后粘贴文本
  3. 将工作簿另存为HTML文件(或网页)
  4. 使用windows资源管理器,转到保存文件的文件夹位置。应该有一个隐藏的文件夹(我认为它是隐藏的)与您的文件同名。例如,如果您的工作簿是Book1.htm,则应该有一个标记为Book1_files的文件夹
  5. 在这个文件夹中,应该有一个名为sheet001.HTM的HTM文件。在记事本(或任何文本编辑器…而不是excel或word)中打开这个文件
  6. 查找原始数据。您将看到,文本并没有显示HTML标记,而是显示编码的版本

希望这能有所帮助。