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