将 DataTable 导出到 Excel 文件显示 ?关于数学符号

Exporting DataTable to Excel file showing ? on mathematics symbols

我正在开发一个 WPF 应用程序,因此我需要将我的数据导出到 excel。我有分数、度数、幂符号等数学查询数据。我能够正确地看到我的数据,但是当我将数据导出到 excel 时,它会将这些符号更改为?

之前我使用 Encoding.ASCII 作为数据,然后我知道我们需要改变它。我试过 UTF7、UTF8、Unicode 和 Default,但没有任何效果。虽然我能够使用 Encoding.Default 正确获取一些数据 在搜索时,我了解了 Office Interlop 但要正确地 运行 您需要安装 MS Office excel 而我不想安装它对我的项目的依赖。

  int rowIndex = 1;
        colIndex = 0;
  foreach (DataRow row in dvRecords.Table.Rows)
        {
            foreach (DataColumn col in dvRecords.Table.Columns)
            {
                if (row[col] != null)
                {

                    if (col.DataType == typeof(int))
                        this.WriteCell(rowIndex, colIndex, Convert.ToInt32(row[col]));
                    else if (col.DataType == typeof(double))
                        this.WriteCell(rowIndex, colIndex, Convert.ToDouble(row[col]));
                    else if (col.DataType == typeof(bool))
                        this.WriteCell(rowIndex, colIndex, (Convert.ToBoolean(row[col]) ? "Yes" : "No"));
                    else
                        this.WriteCell(rowIndex, colIndex, Convert.ToString(row[col]));

                    colIndex++;
                }
            }
            rowIndex++;
            colIndex = 0;
        }

WriteCell 方法

 private BinaryWriter _writer;

 private void WriteCell(int row, int col, string value)
    {

        ushort[] clData = { 0x0204, 0, 0, 0, 0, 0 };
        byte[] plainText = Encoding.Default.GetBytes(value);
        int iLen = plainText.Length;
        clData[1] = (ushort)(8 + iLen);
        clData[2] = (ushort)row;
        clData[3] = (ushort)col;
        clData[5] = (ushort)iLen;
        WriteUshortArray(clData);
        _writer.Write(plainText);
    }

 private void WriteUshortArray(ushort[] value)
    {
        for (int i = 0; i < value.Length; i++)
            _writer.Write(value[i]);
    }

我希望从我的 DataTable 数据中将符号正确导入 excel,但我得到的数据是 "?" symbol

尝试使用这个:

plainText = "<html><head><meta charset=""" & Encoding.UTF8.WebName & """ /></head><body>" & plainText & "</body></html>";
_writer.Write(plainText);
_writer.End();

Excel 无法读取 UTF-8 编码默认,但它使用 html <div>-s 和 table 标签生成 excel table

我已经搜索并终于找到了比以前更好的方法。我开始了解库 SpreadSheetLight。它使用起来非常简单,而且完全免费。这是我更改过的参考代码。

        SLDocument sl = new SLDocument();
        List<string> columnName = new List<string>();
        int rowNumber = 1;
        int currentColumnNumber = 1;
        //set headers
        foreach (DataColumn dataColumn in dvRecords.Table.Columns)
        {
            columnName.Add(dataColumn.ColumnName);
            sl.SetCellValue(rowNumber, currentColumnNumber, dataColumn.ColumnName.Replace("_", " "));
            currentColumnNumber++;
        }
        rowNumber++;
        currentColumnNumber = 1;

        foreach (DataRow dataRow in dvRecords.Table.Rows)
        {
            foreach (var column in columnName)
            {
                sl.SetCellValue(rowNumber, currentColumnNumber, dataRow[column].ToString());
                currentColumnNumber++;
            }
            rowNumber++;
            currentColumnNumber = 1;
        }
        sl.SaveAs(filename);