请问各位大虾,我在winform里想把DataGridView表格里数据用流的形式导出到EXCEL,但导出时老出现“在可以调用DLE之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STATHreadAttribute标记。只有将调试器附加到该进程才会引发此异常。”
我已经按它说的,在mian函数前加了[STATHreadAttribute]了,错误照常,调用代码如下:
private void ExportToExcel(CDataGridView dgvAgeWeekSex)
{ SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; saveFileDialog.FilterIndex = 0; saveFileDialog.RestoreDirectory = true; saveFileDialog.CreatePrompt = true; saveFileDialog.Title = "Export Excel File To"; saveFileDialog.ShowDialog(); Stream myStream; myStream = saveFileDialog.OpenFile(); //StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312")); StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0)); string str = ""; try
{ //写标题 for (int i = 0; i < dgvAgeWeekSex.ColumnCount; i++)
{ if (i > 0)
{ str += "\t"; } str += dgvAgeWeekSex.Columns[i].HeaderText; } sw.WriteLine(str); //写内容 for (int j = 0; j < dgvAgeWeekSex.Rows.Count; j++)
{ string tempStr = ""; for (int k = 0; k < dgvAgeWeekSex.Columns.Count; k++)
{ if (k > 0)
{ tempStr += "\t"; } tempStr += dgvAgeWeekSex.Rows[j].Cells[k].Value.ToString(); } sw.WriteLine(tempStr); } sw.Close(); myStream.Close(); } catch (Exception e)
{ MessageBox.Show(e.ToString()); } finally
{ sw.Close(); myStream.Close(); }
}
不知哪些大哥有遇过这样相同的问题的?帮忙解决一下
我已经按它说的,在mian函数前加了[STATHreadAttribute]了,错误照常,调用代码如下:
private void ExportToExcel(CDataGridView dgvAgeWeekSex)
{ SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; saveFileDialog.FilterIndex = 0; saveFileDialog.RestoreDirectory = true; saveFileDialog.CreatePrompt = true; saveFileDialog.Title = "Export Excel File To"; saveFileDialog.ShowDialog(); Stream myStream; myStream = saveFileDialog.OpenFile(); //StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312")); StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0)); string str = ""; try
{ //写标题 for (int i = 0; i < dgvAgeWeekSex.ColumnCount; i++)
{ if (i > 0)
{ str += "\t"; } str += dgvAgeWeekSex.Columns[i].HeaderText; } sw.WriteLine(str); //写内容 for (int j = 0; j < dgvAgeWeekSex.Rows.Count; j++)
{ string tempStr = ""; for (int k = 0; k < dgvAgeWeekSex.Columns.Count; k++)
{ if (k > 0)
{ tempStr += "\t"; } tempStr += dgvAgeWeekSex.Rows[j].Cells[k].Value.ToString(); } sw.WriteLine(tempStr); } sw.Close(); myStream.Close(); } catch (Exception e)
{ MessageBox.Show(e.ToString()); } finally
{ sw.Close(); myStream.Close(); }
}
不知哪些大哥有遇过这样相同的问题的?帮忙解决一下
你把这句话屏蔽掉
再试一下呢?
改为 myStream = new FileStream(saveFileDialog.FileName, FileMode.OpenOrCreate, FileAccess.Write);
DialogResult result = saveFileDialog.ShowDialog();if(result.ToString() == "OK" )
{
Stream myStream; myStream = saveFileDialog.OpenFile(); //StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312")); StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0)); string str = ""; try
{ //写标题 for (int i = 0; i < dgvAgeWeekSex.ColumnCount; i++)
{ if (i > 0)
{ str += "\t"; } str += dgvAgeWeekSex.Columns[i].HeaderText; }
sw.WriteLine(str);
//写内容 for (int j = 0; j < dgvAgeWeekSex.Rows.Count; j++)
{ string tempStr = ""; for (int k = 0; k < dgvAgeWeekSex.Columns.Count; k++)
{ if (k > 0)
{ tempStr += "\t"; } tempStr += dgvAgeWeekSex.Rows[j].Cells[k].Value.ToString(); }
sw.WriteLine(tempStr); } sw.Close(); myStream.Close(); } catch (Exception e)
{ MessageBox.Show(e.ToString()); } finally
{ sw.Close(); myStream.Close(); }
}
}