【问题标题】:Excel 2019 throws a XML error when get data from ashx handlerExcel 2019 从 ashx 处理程序获取数据时引发 XML 错误
【发布时间】:2019-08-20 08:46:26
【问题描述】:

我有一个连接到 ASHX 处理程序的 excel 文件。用户可以按需更新此文件。使用 Excel 2016(及更早版本)的人在更新时没有问题,但 Excel 2019 用户在尝试更新此文件时收到 XML 错误。错误文本:

“文档顶层元素中的错误”。

ASHX 代码:

public void ProcessRequest(HttpContext context)
{
    var dataProvider = new ReportDataProvider();

    var paramsId = GetParamsId(context);
    var customReportParams = dataProvider.GetParams(paramsId);

    var predifinedParams = new CrossReportPredefinedParams(customReportParams.PredefinedParams);

    var formParams = (customReportParams.FormParams ?? string.Empty)
            .Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(x =>
            {
                int value;
                return new { Valid = int.TryParse(x, out value), Value = value };
            })
            .Where(x => x.Valid && x.Value > 0)
            .Select(x => x.Value)
            .Distinct()
            .ToArray();

    if (!predifinedParams.IsAnyOneDefined && formParams.Length <= 0)
    {
        ReturnError(context, "Не определены параметры отчёта.");
        return;
    }

    var formId = GetFormId(context);
    var data = dataProvider.GetData(formId, predifinedParams, formParams);
    if (data == null)
    {
        ReturnError(context, "Нет данных для указанной регистрационной формы.");
        return;
    }

    var excelCheat = !string.IsNullOrWhiteSpace(context.Request.Params["ExcelCheat"]);
    if (excelCheat && (data.Rows.Count == 1))
        data.Rows.Add();

    context.Response.ContentType = "text/xml";
    data.WriteXml(context.Response.OutputStream);
}

任何想法为什么在使用 2019 Excel 时会发生这种情况以及如何修复它?

UPD_1:xml 文件有效。我创建了它,而不是在输出流中返回并使用 xml 验证器进行检查。

UPD_2:xml 文件:

<NewDataSet>
  <Report>
    <_x2116_>25962</_x2116_>
    <Дата_x0020_последнего_x0020_изменения>14.06.2019 11:52</Дата_x0020_последнего_x0020_изменения>
    <Клиент>*Ромбо</Клиент>
    <Пользователь>Стефанкевич Юлия Владимировна</Пользователь>
    <Статус>Подтверждена</Статус>
    <ФИО>Стефанкевич Юлия Владимировна</ФИО>
    <Название_x0020_компании>ООО "Ромбо-проекты"</Название_x0020_компании>
    <Должность>ассистент менеджера по продажам</Должность>
    <Мобильный_x0020_телефон_x003C_br_x003E__x0028_Пример_x003A__x0020__x002B_7_x0020__x0028_987_x0029__x0020_123_x0020_45_x0020_67_x0029_>+7(906)7105234</Мобильный_x0020_телефон_x003C_br_x003E__x0028_Пример_x003A__x0020__x002B_7_x0020__x0028_987_x0029__x0020_123_x0020_45_x0020_67_x0029_>
    <Адрес_x0020_электронной_x0020_почты>Stefankevich@rombo.ru</Адрес_x0020_электронной_x0020_почты>
  </Report>
</NewDataSet>

UPD_3:我手动将&lt;?xml version="1.0" encoding="UTF-8"?&gt; 添加到生成 ASHX 处理程序的 xml 文件中,但没有帮助。

            string xmlstr;
            using (var stream = new MemoryStream())
            {
                data.WriteXml(stream);
                stream.Seek(0, SeekOrigin.Begin);
                var sr = new StreamReader(stream);
                xmlstr = sr.ReadToEnd();
                xmlstr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + Environment.NewLine + xmlstr;
            }

            var doc = new XmlDocument();
            doc.LoadXml(xmlstr);

            doc.Save(context.Response.Output);

【问题讨论】:

  • 我看不出 Outlook 可能与此问题有什么关系。您的代码是 Outlook 加载项的一部分还是什么?还是您真的是指 Excel 2019?标题提到了 Excel,但在描述中你提到了 Outlook。请让您的问题清晰一致,这样更容易为您提供帮助。
  • ADyson,谢谢,这是我的错误。 Excel 2019 出现问题。原始问题已更新。
  • 谢谢。如果您向我们展示您正在导出的已完成 XML 的示例,它实际上会更有帮助。另外,您可以在任何其他支持 XML 的应用程序中打开 XML 吗?
  • 当我尝试在 excel 中导入此 xml 文件时 - 一切正常,在两个版本的 excel(2016 和 2019)中都没有错误并且数据列正确显示。但是当我尝试通过与 ashx 连接来更新现有的 excel 文件时 - 出现错误(仅限 2019 excel)
  • P.S.实际上,所有 XML 文档都应该在顶部有一个声明行,例如:&lt;?xml version="1.0" encoding="UTF-8" ?&gt; 或类似的。通常,如果您确保将其包含在文件中,您会发现其他程序更容易读取它。

标签: c# excel xml ashx


【解决方案1】:

嗯,真正的错误原因是... Excel 修剪 ashx 处理程序请求的 URL。只有 115 个符号,仅此而已。如何以及为什么?我们(我和我的团队)没有发现。这不仅发生在 2019 年的 excel 用户身上,有些人与 2016 年的 excel 有同样的事情。

所以如果你有同样的问题,请检查从 excel 发送请求的 url(以 Fiddler 为例)。

p.s.:excel文件是由我们的winforms工具为用户报告制作的。而且这个工具使用Microsoft.Office.Interop.Excel库,所以我们对此有些怀疑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2013-11-17
    相关资源
    最近更新 更多