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 两列的数据
哪位高手帮我解决一下
谢谢

解决方案 »

  1.   

            /// <summary>
            /// 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;
                }        }
      

  2.   

    一樓,我怎么沒看出來是導入到文本中?
    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");
                        }
                    }