gpt4 book ai didi

c# - mso 数据放置 :same-cell not working

转载 作者:太空狗 更新时间:2023-10-29 21:58:12 27 4
gpt4 key购买 nike

我正在将数据从网页导出到 Excel。这应该很简单,但是有 <p>数据中的标签。这会导致 Excel 在数据应全部位于同一单元格中时创建新行。经过一些研究,我发现 mso-data-placement 应该可以解决问题,但它不起作用。打开 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-* 属性?!?!

最佳答案

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

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

希望这对您有所帮助。

关于c# - mso 数据放置 :same-cell not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18626248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com