【发布时间】:2013-12-09 23:26:35
【问题描述】:
首先,我对编程还很陌生,所以请原谅我可能提供的知识或术语方面的任何失误。
我正在构建一个 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);
}
【问题讨论】:
标签: c# excel csv datagridview