将RTF导出为纯文本c#

时间:2017-06-21 21:01:38

标签: excel sql-server-2008 export richtext

Stackoverflow社区的好日子,

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

我可以使用提供的代码将数据导出到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和网络论坛上寻找解决方案但没有取得任何成功。 亲切的问候 弗朗索瓦·穆勒

4 个答案:

答案 0 :(得分:0)

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

例如,在字符串中使用idenfity

并将其替换为string.Empty。

类似地

可以用string.Empty替换。

一旦确定了Rich Text HTML标签的所有变体,您就可以创建一个标签列表,并在FOR循环内部用适当的字符串替换每个标签。

答案 1 :(得分:0)

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

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

答案 2 :(得分: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);
    }

答案 3 :(得分:0)

所以我设法通过更改原始代码来解决此问题,如下所示: 由于我只想尝试转换几列,我发现这种方法运行良好。这将确保每个记录在Excel中按行分隔,并将Html转换为纯文本,以允许用户在Excel中添加列过滤器。

我希望这有助于任何其他有类似问题的人。

const MapWithAMakredInfoWindow = compose(
    withScriptjs,
    withGoogleMap
)(props =>
    <GoogleMap
        defaultZoom={8}
        defaultCenter={{ lat: 44.8350088, lng: -0.5872689999999999 }}
    >

        {this.state.PartenaireData.map(function (item, i) {
            if (item.coordinates.latitude && item.coordinates.longitude)
                return (
                    compose(
                        withStateHandlers(() => ({
                            isOpen: false,
                        }), {
                            onToggleOpen: ({ isOpen }) => () => ({
                                isOpen: !isOpen,
                            })
                        })
                    )(markerProps =>
                        <Marker
                            position={{ lat: item.coordinates.latitude, lng: item.coordinates.longitude }}
                            onClick={markerProps.onToggleOpen}
                            key={i}
                        >
                            {(markerProps.isOpen) &&
                                <InfoWindow onCloseClick={markerProps.onToggleOpen}>
                                    <div>
                                        <div>{item.titre}</div>
                                        <div >autre data</div>
                                    </div>
                                </InfoWindow>}
                        </Marker>
                    )
                );
        })}
    </GoogleMap>
);