2017-04-04 4 views
1

クエリから入力したデータテーブルをエクスポートしようとしていますが、最後の行で「無効なセル値」というメッセージが表示されています。空のDB値をExcellにエクスポート

これは、列にNULL値が含まれている場合にのみ発生します。 null値を文字列で置き換えるか、または空白としてExcelファイルにnull値を書き込むようにデータテーブルを変更するにはどうすればよいですか?

これは私が持っているコードです:

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

'、 、文書化されていない形式。それを生成する唯一の信頼できる方法は、Excelをローカルにインストールすることでした。過去12年間に使用されたフォーマット、 'xlsx'はよく書かれており、さまざまなSDKやライブラリによって直接生成されます。 [EPPlus](https://www.nuget.org/packages/EPPlus/)のようなライブラリを使って、単純な 'sheet.LoadFromDataTable(dt);'を使って実際のxlsxファイルを生成することができます。 ](https://epplus.codeplex.com/wikipage?title=WebapplicationExample)。 –

+0

'xls'は、Googleスプレッドシートや有料の定期購読をしていない他のプロバイダでもサポートされています。 –

+0

Panagiotisに完全に同意しますが、質問に答えるには、MSSQLのISNULL()に相当するOracleを使用して、ヌル値をスペースなどで置き換えてください。 – Crowcoder

答えて

0

私はヌルvaluseためDataSetをチェックして、それらを交換するために、このメソッドを使用します。

非推奨の古いxls`
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

関連する問題