mso-data-placement:同一个单元格不工作

我正在将数据从网页导出到Excel中。 这应该是一个没有道理,但数据中有<p>标签。 这导致Excel创build新行时,数据应该都在同一个单元格中。 经过一番研究,我发现mso-data-placement应该能够做到这一点,但是它不起作用。 Excel将打开,显示数据,但会创build额外的不必要的行。 这是我用来导出数据的代码:

 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> 

build议?


我试了一些其他的东西

  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- *属性?!?!

有一个解决scheme,但它不干净。

在dge.DataBind之后,放置下面的代码。 这将编码每个单元格的文本

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

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

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

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

希望这可以帮助。