[英]Exporting empty cells to csv comma-delimited file from datagridview
首先,我对编程还是很陌生,所以请原谅我可能会提供的知识或术语方面的任何失误。
我正在构建一个C#应用程序,该程序首先将Excel工作簿中的数据导入到一组datagridviews(每个工作表一个dgv)中。 用户可以从每个数据网格中选择一个自定义单元格范围,然后单击一个按钮以将所选范围导出到CSV文件。 至此,我已经完成了大部分工作,但是我遇到的问题是,它最终跳过了空白单元格,我需要将这些单元格包含在csv的最终输出中。 例如,如果单元格A1到A3有一个值,但A4没有,并且用户选择范围A1到A4,则最终的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);
}
尝试使用ascii
添加一个non-breaking space
例如:
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
然后,当您稍后对其进行处理时,可以使用所选字符将这些字符标识为空白或空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.