2013-12-09 263 views
0

首先,我還是相當新的編程,所以請原諒我可能提供的知識或術語的任何失誤。從datagridview導出空單元格到csv逗號分隔文件

我正在構建一個C#應用程序,它首先將數據從Excel工作簿導入一組datagridviews(每個工作表一個dgv)。用戶可以從每個數據網格中選擇一個自定義範圍的單元格,然後單擊一個按鈕將選定範圍導出到CSV文件。到目前爲止,我擁有大部分需要工作的東西,但是我遇到的問題是它最後跳過了空白單元格,我需要將它們包含在csv的最終輸出中。例如,如果單元格A1到A3有一個值,但A4沒有,並且用戶選擇通過A4範圍A1,最終CSV需要輸出爲:

1,2,3, 

然而,我現在有它的方式,它只輸出1,2,3。如果在範圍的末尾有多個空白單元格,它會做同樣的事情,我們需要這些空白單元格。

要注意的是,如果空白單元格出現在範圍內的任何地方,它可以正常工作......只有單元格在這個範圍的開始或結束時是空的,這似乎發生了。

如果我將任何空值或空值重置爲「」,它將作爲一種解決方法,但我更希望末尾文件中沒有任何空白類型的值。

我感謝所有幫助。這裏是我的代碼處理這個導出功能:

private void exportClick(DataGridView dgv) 
    { 
     Int32 selectedCellCount = dgv.GetCellCount(DataGridViewElementStates.Selected); 
     int CurrentRow = 0; 
     int CurrentColumn = 0; 

     Excel.Application xlApp; 
     Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 
     object misValue = System.Reflection.Missing.Value; 

     xlApp = new Excel.Application(); 
     xlWorkBook = xlApp.Workbooks.Add(misValue); 
     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

     if (selectedCellCount > 0) 
     { 
      for (int i = 0; i < selectedCellCount; i++) 
      { 
       // Get the Row and Column index values 
       CurrentRow = Convert.ToInt16(dgv.SelectedCells[i].RowIndex.ToString()); 
       CurrentColumn = Convert.ToInt16(dgv.SelectedCells[i].ColumnIndex.ToString()); 

       // Set cell to current cells' value 
       DataGridViewCell cell = dgv[CurrentColumn, CurrentRow]; 

       // Check if the cell Value is empty, set to ??? so a comma is written 
       if (String.IsNullOrEmpty(cell.Value.ToString())) 
        cell.Value = " "; 

       // Write the value to the worksheet 
       xlWorkSheet.Cells[CurrentRow + 1, CurrentColumn + 1] = cell.Value; 
      } 

      // Prompt to save the results as a csv file 
      if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
      { 

       xlWorkBook.SaveAs(saveFileDialog1.FileName, Excel.XlFileFormat.xlCSV, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
      } 
     } 

     xlWorkBook.Close(true, misValue, misValue); 
     xlApp.Quit(); 

     releaseObject(xlWorkSheet); 
     releaseObject(xlWorkBook); 
     releaseObject(xlApp); 
    } 

回答

0

嘗試添加non-breaking space使用ascii這樣的:

if (String.IsNullOrEmpty(cell.Value.ToString())) 
    cell.Value = char.ConvertFromUtf32(160); 

或任何其他不可見字符的ASCII表,如:

Delete - 127 
Soft Hyphen - 173 
Unknown - 129 or 141 

或者也許你可以使用一個特殊的字符,它會顯示空白, 不會被用戶最有可能使用像那些信e有 字符以上,如:

232 - with grave 
233 - with acute 
234 - with circumflex 
235 - with diaerisis 

然後,當你處理它以後,你可以使用你所選擇的字符識別那些字符作爲空或空間 。

+0

謝謝埃珀。最終,我決定跳過輸出到Excel,並使用管道分隔符將輸出寫入文本文件。由於Excel csv的默認逗號分隔結果,我們需要爲此找到一種不同的方法,因爲我們的一些數據可能包含逗號。雖然我很欣賞這個反饋! – svenGUTT

+0

@svenGUTT很好,你可以根據你的需求找到工作。快樂編碼和上帝保佑! – Edper

相關問題