将空数据库值导出为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); 
+0

'xls'是旧的,过时,无证的格式。生成它的唯一可靠方法是在本地安装Excel。过去12年中使用的格式“xlsx”已有详细记录,可以由各种SDK和库直接生成。你可以使用像[EPPlus]这样的库(https://www.nuget.org/packages/EPPlus/)用一个简单的'sheet.LoadFromDataTable(dt);'来生成一个真正的xlsx文件, ](https://epplus.codeplex.com/wikipage?title=WebapplicationExample)。 –

+0

'xls'也不*支持谷歌表和其他供应商没有付费订阅精确,因为支持它花费他们的钱。 –

+0

完全同意Panagiotis,但要回答这个问题,只需使用Oracle的等效MSSQL的'ISNULL()'来替换空值或任何你想要的空值。 – Crowcoder

我用这个方法,以检查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; 
     } 
    } 
+0

您可以保存自己的一些代码,因为列表中唯一不是值类型的类型是'String'。 – Crowcoder

+0

亲爱的@Crowcoder我想你需要阅读关于数据库的值:D。你完全错了。 – David

+0

你甚至没有意识到数据库的基本概念。 – David