【问题标题】:Getting value hexadecimal 0x02, character not valid获取值十六进制 0x02,字符无效
【发布时间】:2016-02-08 21:53:15
【问题描述】:

我收到以下错误:

,值十六进制 0x02,字符无效。

使用此代码:

using (XLWorkbook wb = new XLWorkbook())
{
  wb.Worksheets.Add(dt1);
  Response.Clear();
  Response.Buffer = true;
  Response.Charset ="";    
  Response.ContentType = "application/vnd.openxmlformats-     officedocument.spreadsheetml.sheet";
  //Response.AddHeader("content-disposition", "attachment;filename=GridView.xlsx");
  Response.AddHeader("content-disposition", "attachment;filename=" + filename);
  using (MemoryStream MyMemoryStream = new MemoryStream())
  {
      wb.SaveAs(MyMemoryStream);
      MyMemoryStream.WriteTo(Response.OutputStream);
      Response.Flush();
      Response.End();
  }

}

我尝试了不同的方法,但仍然遇到同样的错误。 “dt1”由存储过程填充。

【问题讨论】:

  • 如果你想向 XLWorkBook 添加一个数据表,你做错了。在你创建 wb 之后,你需要创建一个工作表,顺便说一下,你的工作表的名称是是一个字符串,例如var ws = wb.Worksheets.Add("My Test WorkSheet");,它会在 Excel 打开时显示在底部。然后要将数据表添加到工作表中,您需要指定一个单元格范围,例如ws.Cell(11, 1).InsertTable(dt1.AsEnumerable());
  • 我发布了一个使用 ClosedXML 的工作示例我知道这是可行的,因为我也刚刚对其进行了测试..
  • @MethodMan 您可以将 DataTable 添加为新的 Worksheet,参见documentation
  • 从错误消息中我认为 DataTable 包含无效的字符串数据。
  • @Raidri 您可以添加一个数据表,但必须为初学者插入它。工作表名称也是他应该命名的名称。不是整个数据表。我已经测试了我的解决方案,它工作与 OP 试图做的事情.. 因为 OP 没有根据ClosedXML 文档显示的方式添加 DataTable 如果是这种情况,OP 必须在数据表中有一些无关的数据我也有我可以发布的方法,如果 html 字符存在于 DataTable 中,将删除它们

标签: c# closedxml


【解决方案1】:

要使用 ClosedXML,我目前正在执行以下操作,并调用此方法从网页打开 Excel。

要调用 ExportToExcel_SomeReport,您可以这样做,我创建了一个名为 Extensions 的公共静态类

Extensions.ExportToXcel_SomeReport(dt1, fileName, this.Page);//Call the method on your button click 

//this will be in the static public class you create
internal static void ExportToXcel_SomeReport(DataTable dt, string fileName, Page page)
{
    var recCount = dt.Rows.Count;
    fileName = string.Format(fileName, DateTime.Now.ToString("MMddyyyy_hhmmss"));
    var xlsx = new XLWorkbook();
    var ws = xlsx.Worksheets.Add("Some Custom Report");
    ws.Style.Font.Bold = true;
    ws.Cell("C5").Value = "Some Custom Header Report";
    ws.Cell("C5").Style.Font.FontColor = XLColor.Black;
    ws.Cell("C5").Style.Font.SetFontSize(16.0);
    ws.Cell("E5").Value = DateTime.Now.ToString("MM/dd/yyyy HH:mm");
    ws.Range("C5:E5").Style.Font.SetFontSize(16.0);
    ws.Cell("A7").Value = string.Format("{0} Records", recCount);
    ws.Style.Font.Bold = false;
    ws.Cell(9, 1).InsertTable(dt.AsEnumerable());
    ws.Row(9).InsertRowsBelow(1);
   // ws.Style.Font.FontColor = XLColor.Gray;
    ws.Columns("1-8").AdjustToContents();
    ws.Tables.Table(0).ShowAutoFilter = true;
    ws.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
    DynaGenExcelFile(fileName, page, xlsx);
}

private static void DynaGenExcelFile(string fileName, Page page, XLWorkbook xlsx)
{
    page.Response.ClearContent();
    page.Response.ClearHeaders();
    page.Response.ContentType = "application/vnd.ms-excel";
    page.Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.xls", fileName));

    using (MemoryStream memoryStream = new MemoryStream())
    {
        xlsx.SaveAs(memoryStream);
        memoryStream.WriteTo(page.Response.OutputStream);
        memoryStream.Close();
    }
    page.Response.Flush();
    page.Response.End();
}

【讨论】:

  • 这项工作肯定有一些不同的东西,你正在做的事情我无法在没有看到你的整个代码的情况下判断..
猜你喜欢
  • 2018-05-30
  • 2012-07-15
  • 2012-06-17
  • 2016-11-14
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2014-01-29
相关资源
最近更新 更多