将空数据库值导出为Excell
问题描述:
我试图导出一个从查询中填充的数据表,但是我在最后一行收到一条带有消息“无效单元值”的异常。将空数据库值导出为Excell
这只有在列包含空值时才会发生。 如何修改我的数据表以将空值替换为字符串或将空值写入Excel文件中作为空格。
这是代码,我有:
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
OracleDataAdapter adptr = new OracleDataAdapter();
try {
con.Open();
var oracmd = con.CreateCommand();
oracmd.CommandText = "select Column1,Column2 from Test";
adptr.SelectCommand = oracmd;
adptr.Fill(dt);
con.Close();
ds.Tables.Add(dt);
SaveFileDialog saveFileDialog1 = new SaveFileDialog
{
Filter = "Excell files (*.xls)|*.xls";
RestoreDirectory = true;
};
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
ExcelLibrary.DataSetHelper.CreateWorkbook(saveFileDialog1.FileName, ds);
答
我用这个方法,以检查DataSet
为空valuse和替换它们:
public static DataSet DBNull(DataSet dataSet)
{
try
{
foreach (DataTable dataTable in dataSet.Tables)
foreach (DataRow dataRow in dataTable.Rows)
foreach (DataColumn dataColumn in dataTable.Columns)
if (dataRow.IsNull(dataColumn))
{
if (dataColumn.DataType.IsValueType) dataRow[dataColumn] = Activator.CreateInstance(dataColumn.DataType);
else if (dataColumn.DataType == typeof(bool)) dataRow[dataColumn] = false;
else if (dataColumn.DataType == typeof(Guid)) dataRow[dataColumn] = Guid.Empty;
else if (dataColumn.DataType == typeof(string)) dataRow[dataColumn] = string.Empty;
else if (dataColumn.DataType == typeof(DateTime)) dataRow[dataColumn] = DateTime.MaxValue;
else if (dataColumn.DataType == typeof(int) || dataColumn.DataType == typeof(byte) || dataColumn.DataType == typeof(short) || dataColumn.DataType == typeof(long) || dataColumn.DataType == typeof(float) || dataColumn.DataType == typeof(double)) dataRow[dataColumn] = 0;
else dataRow[dataColumn] = null;
}
return dataSet;
}
catch (Exception ex)
{
return dataSet;
}
}
'xls'是旧的,过时,无证的格式。生成它的唯一可靠方法是在本地安装Excel。过去12年中使用的格式“xlsx”已有详细记录,可以由各种SDK和库直接生成。你可以使用像[EPPlus]这样的库(https://www.nuget.org/packages/EPPlus/)用一个简单的'sheet.LoadFromDataTable(dt);'来生成一个真正的xlsx文件, ](https://epplus.codeplex.com/wikipage?title=WebapplicationExample)。 –
'xls'也不*支持谷歌表和其他供应商没有付费订阅精确,因为支持它花费他们的钱。 –
完全同意Panagiotis,但要回答这个问题,只需使用Oracle的等效MSSQL的'ISNULL()'来替换空值或任何你想要的空值。 – Crowcoder