2017-06-21 51 views
0

好日子到Stackoverflow社区,将纯文本导出为纯文本c#

我需要一些专家帮助。我有一个MVC4网络应用程序,它有一些由TinyMCE支持的富文本框字段。到目前为止,该系统运行良好。上周,我的客户告诉我他们想要将存储在Microsoft SQL中的数据导出到Excel中以运行自定义报告。

我可以导出数据,以提供的代码优秀。但是,它以RTF格式导出数据,而不是纯文本格式。当他们尝试阅读内容时,这会造成问题。

由于缺乏知识和或理解,我无法弄清楚这一点。我读过,可以使用正则表达式来做到这一点,但我不知道如何实现这一点。所以我转向你寻求帮助。

public ActionResult ExportReferralData() 
    { 
     GridView gv = new GridView(); 
     gv.DataSource = db.Referrals.ToList(); 
     gv.DataBind(); 
     Response.ClearContent(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", "attachment; filename=UnderwritingReferrals.xls"); 
     Response.ContentType = "application/ms-excel"; 
     Response.AddHeader("Content-Type", "application/vnd.ms-excel"); 
     Response.Charset = ""; 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     gv.RenderControl(htw); 
     Response.Output.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 

     return RedirectToAction("Index"); 
    } 

我真的很感激任何帮助。并提前感谢你。

我已经在YouTube和网络论坛上寻找解决方案,取得任何成功。 亲切的问候 Francois Muller

+0

不知道这会有所帮助,但在桌面应用程序中,您可以在代码中创建richtext控件(不必须可见)。将richtext加载到控件中,然后将计划文本从控件中取出。您可以查看TinyMCE是否可以选择将计划文本取消并尝试类似的方法。 – Durus

回答

0

您可以执行的一个选项是按摩您写入XML文件的数据。

例如,在您的字符串中标识

并将其替换为string.Empty。

同理

可以用string.Empty替换。

确定Rich Text HTML标签的所有变体后,您可以创建一个标签列表,并在for循环中用合适的字符串替换它们中的每一个。

+0

非常感谢您花时间回复。总是很高兴看到个人帮助..请原谅我的无知,但你有可能有一个示例代码,你可以分享? –

0

您是否尝试将文件保存为.xslx并发送到客户端。

较新的Excel格式可能更优雅地处理数据?

+0

我做到了。这个问题不在数据中。这正如SQL表中显示的那样。出于某种原因,他们希望进行报告并使用(RTF)中的注释部分,因为他们希望能够从Word,Outlook和Excel文档中复制和过去。所以当他们尝试阅读这些信息时,他们会得到所有的HTML标签,并且由于不了解HTML而导致客户端迷惑了。所以要解决这个问题,我想将文本转换为纯文本,然后导出到Excel。 –

+0

如果您可以添加一个没有公司数据的SAMPLE文本,它会给出一个想法什么是预期的输入和输出数据。 –

+0

美好的一天,我希望利用文本: <标签样式=“颜色:红色;字体大小:XLARGE”>客户取消有覆盖 并将其转换为: 客户取消有覆盖 我再次只需要这样做。我需要原始数据保持原样,以便在通过应用程序编辑数据时能够正确显示。我只需要纯文本部分将其导出到Excel中,以便客户端可以轻松读取内容。 –

0

将此函数添加到您的代码中,然后您可以调用将函数传递给HTML字符串的函数。返回输出将是HTML免费的。

警告:这不适用于所有情况,不应该用于处理不可信用户输入。请用您的输入字符串的变体进行测试。

public static string StripTagsCharArray(string source) 
    { 
     char[] array = new char[source.Length]; 
     int arrayIndex = 0; 
     bool inside = false; 
     for (int i = 0; i < source.Length; i++) 
     { 
      char let = source[i]; 
      if (let == '<') 
      { inside = true; continue; } 
      if (let == '>') { inside = false; continue; } 
      if (!inside) { array[arrayIndex] = let; arrayIndex++; } 
     } 
     return new string(array, 0, arrayIndex); 
    } 
+0

谢谢大家帮助我解决这个问题。我设法通过更改我的代码来解决问题。我想我会补充我的发现来帮助任何有同样问题的人。我改变了这一行: Response.Output.Write(sw.ToString()); 有: 的Response.Write(HttpUtility.HtmlDecode(sw.ToString()) 请注意,我发现问题了拉空值时,在Excel中它是由以下字符表示:A 我会更新这个帖子一旦我找到了工作解决方案 –