2012-03-08 76 views
0

我想创建一个程序,我从Excel文件(.xlsx)导入数据,对其进行更改,然后将其保存回Excel文件。我有一对夫妇的问题,即时通讯坚持了,我希望你能帮助我:保存从datagridview的头来excel?另存为Excel 2007格式(.xlsx)?

  1. 当我出口的datagridview回Excel,它错过了头,我怎样才能得到它导出这些以及?其他一切出口都很好。

  2. 目前看来我只能将导出保存为.xls文件,我如何将其另存为.xlsx文件。我已将文件名更改为xlsx,它创建了该文件,但我无法在Excel中查看它,因为格式不正确。

  3. 最后,如上所述,我想将它保存到原来的Excel文件中,我导入到datagridview,但我得到一个错误,说:“不能访问..... /调试文件夹,它可能已损坏或读取只要”。

以下是用于将Excel(.XLSX)数据导入到DataGridView

public Form1() 
    { 
     InitializeComponent(); 

     // populate the dataGridView with the Excel File 
     string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=""Excel 8.0;HDR=YES;IMEX=1; 
               """, @"C:\Documents and Settings\User\Desktop\Visual Studio\GBstock\GBstock\bin\Debug\FORM TEST.xlsx"); 
     string query = String.Format("select * from [{0}$]", "Sheet1"); 
     OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString); 
     DataSet dataSet = new DataSet(); 
     dataAdapter.Fill(dataSet); 
     dataGridView1.DataSource = dataSet.Tables[0]; 

     // populates the comboBox (cbSuppList) with all column headers 
     for (int i = 3; i < dataGridView1.Columns.Count; i++) 
      { 
       cbSuppList.Items.Add(dataGridView1.Columns[i].HeaderText); 
      } 
    } 

以下是从DataGridView到Excel “保存” 代码,allbeit .xls格式

代码
private void btnSave_Click(object sender, EventArgs e) 
    { 
     Excel.Application xlApp; 
     Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 
     object misValue = System.Reflection.Missing.Value; 

     xlApp = new Excel.Application(); 
     xlWorkBook = xlApp.Workbooks.Add(misValue); 
     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
     int i = 0; 
     int j = 0; 

     for (i = 0; i <= dataGridView1.Rows.Count - 1; i++) 
     { 
      for (j = 0; j <= dataGridView1.Columns.Count - 1; j++) 
      { 
       DataGridViewCell cell = dataGridView1[j, i]; 
       xlWorkSheet.Cells[i + 1, j + 1] = cell.Value; 
      } 
     } 
     xlWorkBook.SaveAs("C:/Documents and Settings/User/Desktop/Visual Studio/GBstock/GBstock/bin/Debug/FORM TEST.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
     xlWorkBook.Close(true, misValue, misValue); 
     xlApp.Quit(); 
    } 

回答

1
  1. 你永远不使用的HeaderText,如:
    dataGridView1.Columns[X].HeaderText 在第一次for循环之前,可以使用上一行(使用列索引X)循环该列(作为循环的第二个循环)。 基本思想:

    对(INT索引= 0;指数< = dataGridView1.Columns.Count - 1;索引++)
    {
    //dataGridView1.Columns[index] .HeaderText
    }

  2. 在Office 2007之前,您可以使用您的方法。
    但是,随着Office 2007的多,你必须使用的OpenXML
    你可以看到一个例子:http://msdn.microsoft.com/en-us/library/bb508943(v=office.12).aspx 您也可以在code project发现一些ressources。

  3. 你有布置中使用的所有ressources?
    此外,如果您将xls数据写入xslx文件,它的格式不正确(如您所见)... 如果您的dataAdapter不是disposed,则该文件可能是锁定的(您无法覆盖它)。 但是,它可能是其他错误(你有哪些例外?什么是异常的类型?)

+0

感谢您的回应。我很新,并且一直在学习,它更多的是一种业余爱好而不是一种职业。 1.我将如何去使用HeaderText?我正在读这个,并会相应地改变。 3.资源?我是否曾经一次性地回顾过这些数据后才必须处置? – Rg786 2012-03-08 11:44:00

+0

我们编辑我的答案,添加一些新闻信息。 – kerrubin 2012-03-08 12:55:19

+0

谢谢。 3.我已经包含了处理dataAdaptor,但是我得到了一个“COMException was unhandled”的错误。它所显示的代码行是上面第四行的代码,如上所示:(xlWorkBook.SaveAs(“C:/ .... etc)) – Rg786 2012-03-08 14:17:57