[英]Save Headers from datagridview to excel? save as Excel 2007 format (.xlsx)?
我正在嘗試創建一個程序,據此我可以從excel文件(.xlsx)導入數據,對其進行更改,然后將其保存回excel文件。 我遇到一些問題,希望您可以幫助我:
當我將datagridview導出回Excel時,它會漏掉標題,我又該如何將其導出? 其他所有東西都可以出口。
目前看來,我只能將導出另存為.xls文件,如何將其另存為.xlsx文件。 我已將文件名更改為xlsx,它創建了文件,但由於格式不正確,所以我無法在excel中查看它。
最后,如上所述,我想將其保存到我導入到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();
}
您永遠不會使用HeaderText,例如:
dataGridView1.Columns[X].HeaderText
在第一個for循環之前,您可以使用上一行(在X處為列的索引)循環列(作為第二個for循環)。 基本思路:
for(int索引= 0;索引<= dataGridView1.Columns.Count-1;索引++)
{
//dataGridView1.Columns[index] .HeaderText
}
在Office 2007之前,您可以使用您的方法。
但是,在Office 2007及更高版本中,您必須使用OpenXML
您可以看到一個示例: http : //msdn.microsoft.com/zh-cn/library/bb508943( v=office.12) .aspx您還可以在代碼項目中找到一些資源。
您是否處置了所有使用過的資源?
另外,如果你寫XLS數據XSLX文件,這不是正確的格式(如你看到的)...如果你的DataAdapter沒有配置 ,該文件可能鎖定(你不能覆蓋它)。 但是,這可能是另一個錯誤(您在哪里有異常?異常的類型是什么?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.