将 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);
我正在开发一个 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);