2013-12-09 121 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

相关问题