日期:2014-05-18  浏览次数:20878 次

为什么SaveFileDialog保存的文件路径不能打开
我在导出excel表格的时候,用了saveFileDialog去获取要保存到的路径,为什么系统报错说不能访问呢?而且生成的Excel中根本就没有要导出的数据?请各位前辈帮我解决一下。谢谢。
这是我写的表示层的代码:
private void btnExport_Click(object sender, EventArgs e)
  {
  if (this.dgvShow.Rows.Count <= 0)
  {
  MessageBox.Show("没有数据可以导出!!!");
  return;
  }
  SaveFileDialog fileDialog = new SaveFileDialog();
  fileDialog.DefaultExt = "xls";
  //设置默认文件类型显示顺序
  fileDialog.FilterIndex = 2;
  //保存对话框是否记忆上次打开的目录
  fileDialog.RestoreDirectory = true;

  if (fileDialog.ShowDialog() == DialogResult.OK)
  {
  if ((fileDialog.OpenFile()) != null)
  {
  //获得文件路径
  String localFilePath = fileDialog.FileName;
  teacherService.ExportData(dgvShow, localFilePath);
  MessageBox.Show("OK!!");
  return;
  }
  }
  MessageBox.Show("Error!!");
  }

我把导Excel数据的代码:
public void ExportData(DataGridView dgvShow,String dir)
  {
  Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
  excel.Workbooks.Add();
  int num = 1;
  for (int i = 0; i < dgvShow.Columns.Count; i++)
  {
  if (dgvShow.Columns[i] is DataGridViewTextBoxColumn)
  {
  excel.Cells[1, num] = dgvShow.Columns[i].HeaderText;
  num++;
  }
  }
  for (int i = 0; i < dgvShow.Rows.Count; i++)
  {
  num = 1;
  for (int j = 0; j < dgvShow.Columns.Count; j++)
  {
  string value = dgvShow.Rows[i].Cells[j].Value.ToString();
  if (dgvShow.Columns[j] is DataGridViewTextBoxColumn)
  {
  excel.Cells[i + 2, num] = value;
  num++;
  }
  }
  }
  excel.ActiveWorkbook.SaveAs(dir,XlFileFormat.xlWorkbookNormal);
  excel.ActiveWorkbook.Close();
  excel.Quit();
  }
请各位前辈帮我看一下!谢谢

------解决方案--------------------
首先文件流打开没关闭,这是你写不进去的原因
其次filter都没指定内容,你指定filterindex干吗


------解决方案--------------------
if ((fileDialog.OpenFile()) != null)
我一直没用过OpenFile的方法
这方法是用干嘛的呢?



------解决方案--------------------
探讨

首先文件流打开没关闭,这是你写不进去的原因
其次filter都没指定内容,你指定filterindex干吗

------解决方案--------------------
这还不对就该看你export的方法了,你debug跟一下看看吧
比如dgvShow.Rows[i].Cells[j].Value.ToString();
如果dgvShow.Rows[i].Cells[j]是null的话,这句就会报错
------解决方案--------------------
你可以在写入之前,退出你的程序,试试删除被保存的文件,看看有没有 提示被占用。
这个问题我之前页翻过。如果程序退出了还 占用着文件,肯定操作不了。