簡體   English   中英

將標頭從datagridview保存到Excel? 另存為Excel 2007格式(.xlsx)?

[英]Save Headers from datagridview to excel? save as Excel 2007 format (.xlsx)?

我正在嘗試創建一個程序,據此我可以從excel文件(.xlsx)導入數據,對其進行更改,然后將其保存回excel文件。 我遇到一些問題,希望您可以幫助我:

  1. 當我將datagridview導出回Excel時,它會漏掉標題,我又該如何將其導出? 其他所有東西都可以出口。

  2. 目前看來,我只能將導出另存為.xls文件,如何將其另存為.xlsx文件。 我已將文件名更改為xlsx,它創建了文件,但由於格式不正確,所以我無法在excel中查看它。

  3. 最后,如上所述,我想將其保存到我導入到datagridview的原始Excel文件中,但是我收到一條錯誤消息,提示“無法訪問..... / debug文件夾,它可能已損壞或只讀”。

以下是用於將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的“保存”代碼,盡管格式為.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. 您永遠不會使用HeaderText,例如:
    dataGridView1.Columns[X].HeaderText在第一個for循環之前,您可以使用上一行(在X處為列的索引)循環列(作為第二個for循環)。 基本思路:

    for(int索引= 0;索引<= dataGridView1.Columns.Count-1;索引++)
    {
    //dataGridView1.Columns[index] .HeaderText
    }

  2. 在Office 2007之前,您可以使用您的方法。
    但是,在Office 2007及更高版本中,您必須使用OpenXML
    您可以看到一個示例: http : //msdn.microsoft.com/zh-cn/library/bb508943( v=office.12) .aspx您還可以在代碼項目中找到一些資源。

  3. 您是否處置了所有使用過的資源?
    另外,如果你寫XLS數據XSLX文件,這不是正確的格式(如你看到的)...如果你的DataAdapter沒有配置 ,該文件可能鎖定(你不能覆蓋它)。 但是,這可能是另一個錯誤(您在哪里有異常?異常的類型是什么?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM