int[] columnName = new int[dgv_PubData.Columns.GetColumnCount(DataGridViewElementStates.Visible)];
int ii = 0;
foreach (DataGridViewColumn dgvc in dgv_PubData.Columns)
{
if (dgvc.Visible == true)
{
columnName[ii] = dgvc.Index;
ii++;
}
}string theFile;
saveFileDialog1.InitialDirectory = Application.ExecutablePath;
saveFileDialog1.Filter = "excel Files(*.xls)|*.xls"; //|word Files(*.doc)|*.doc|txt Files(*.txt)|*.txt|All Files(*.*)|*.*
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.ShowDialog();
theFile = saveFileDialog1.FileName;if (theFile != "")
{
TextWriter twrite = new StringWriter();
FileStream mystream = new FileStream(theFile, FileMode.OpenOrCreate); StreamWriter streamWriter = new StreamWriter(mystream, Encoding.Unicode); for (int i = 0; i <= dgv_PubData.Rows.Count; i++)
{
for (int j = 0; j <= columnName.Length; j++)
{
try
{
if (i == 0)
{ if (j != columnName.Length)
{
streamWriter.Write(dgv_PubData.Columns[j].HeaderText.ToString() + "\t");
streamWriter.Flush();
}
else
{
streamWriter.Write("\r\n");
}
}
else
{
if (j != columnName.Length)
{
streamWriter.Write(dgv_PubData.Rows[i - 1].Cells[j].Value.ToString() + "\t");
streamWriter.Flush();
}
else
{
streamWriter.Write("\r\n");
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
streamWriter.Close();
}
以上是我导出dgv_PubData里面数据的代码
我想实现的效果:
dgv_PubData 里有 A、B、C、D 4列
我现在将 B、C 两列隐藏
只想导 A、D 两列的数据
但是上面的代码导出的是 A、B 两列的数据
哪位高手帮我解决一下
谢谢
/// DataGridView导出数据到Excel
/// </summary>
/// <param name="dgv">DataGridView控件</param>
/// <returns></returns>
public static bool DataGridView2Excel(DataGridView dgv)
{ try
{
Excel.Application myExcel = new Excel.Application();
myExcel.Application.Workbooks.Add(true);
myExcel.Visible = true;
//生成标题
for (int i = 0; i < dgv.Columns.Count; i++)
{
myExcel.Cells[1, i + 1] = dgv.Columns[i].Name;
}
//填充数据
for (int i = 0; i < dgv.Rows.Count; i++)
{
for (int j = 0; j < dgv.Columns.Count; j++)
{
myExcel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
}
}
return true;
}
catch
{
return false;
} }
LZ,你的問題應該是出在這個else中,你的控制輸出項有問題,我沒有試驗,sorry!
else
{
if (j != columnName.Length)
{
streamWriter.Write(dgv_PubData.Rows[i - 1].Cells[j].Value.ToString() + "\t");
streamWriter.Flush();
}
else
{
streamWriter.Write("\r\n");
}
}