Excle導(dǎo)入:
public static DataSet LoadDataFromExcel()
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? string strConn;
? ? ? ? ? ? ? ? strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.IO.Directory.GetCurrentDirectory() + "\\ListView.xls" + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
? ? ? ? ? ? ? ? OleDbConnection OleConn = new OleDbConnection(strConn);
? ? ? ? ? ? ? ? OleConn.Open();
? ? ? ? ? ? ? ? String sql = "SELECT * FROM? [sheet1$]";//可是更改Sheet名稱尸疆,比如sheet2椿猎,等等
? ? ? ? ? ? ? ? OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
? ? ? ? ? ? ? ? DataSet OleDsExcle = new DataSet();
? ? ? ? ? ? ? ? OleDaExcel.Fill(OleDsExcle, "Sheet1");
? ? ? ? ? ? ? ? OleConn.Close();? ? ? ? ? ? ??
? ? ? ? ? ? ? ? return OleDsExcle;
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception err)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? MessageBox.Show("數(shù)據(jù)綁定Excel失敗!失敗原因:" + err.Message, "提示信息",
? ? ? ? ? ? ? ? ? ? MessageBoxButtons.OK, MessageBoxIcon.Information);
? ? ? ? ? ? ? ? return null;
? ? ? ? ? ? }
? ? ? ? }
導(dǎo)入excel后想把得到的dataset類型的數(shù)據(jù)存放到listview中,因?yàn)橹朗怯?個(gè)列所以直接寫了
foreach (DataTable dt in aa.Tables)
? ? ? ? ? ? ? ? foreach (DataRow dr in dt.Rows) {? ??
? ? ? ? ? ? ? ? ? ? var item = new ListViewItem();
? ? ? ? ? ? ? ? ? ? item.Text = dr[0].ToString();
? ? ? ? ? ? ? ? ? ? item.SubItems.Add(dr[1].ToString());
? ? ? ? ? ? ? ? ? ? item.SubItems.Add(dr[2].ToString());
? ? ? ? ? ? ? ? ? ? item.SubItems.Add(dr[3].ToString());
? ? ? ? ? ? ? ? ? ? item.SubItems.Add(dr[4].ToString());
? ? ? ? ? ? ? ? ? ? item.SubItems.Add(dr[5].ToString());
? ? ? ? ? ? ? ? ? ? item.SubItems.Add(dr[6].ToString());
? ? ? ? ? ? ? ? ? ? item.SubItems.Add(dr[7].ToString());
? ? ? ? ? ? ? ? ? ? item.SubItems.Add(dr[8].ToString());
? ? ? ? ? ? ? ? ? ? listView1.Items.Add(item);? ? ? ? ? ? ? ?
}
Excle導(dǎo)出:
public void ExportToExecl()
? {
? ? ? ? ? ? System.Windows.Forms.SaveFileDialog sfd = new SaveFileDialog();
? ? ? ? ? ? sfd.DefaultExt = "xls";
? ? ? ? ? ? sfd.Filter = "Excel文件(*.xls)|*.xls";
? ? ? ? ? ? sfd.FileName = "ListView.xls";
? ? ? ? ? ? sfd.InitialDirectory = @"System.IO.Directory.GetCurrentDirectory()";
? ? ? ? ? ? if (sfd.ShowDialog() == DialogResult.OK)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? DoExport(this.listView1, sfd.FileName);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? private void DoExport(ListView listView, string strFileName)
? ? ? ? {
? ? ? ? ? ? int rowNum = listView.Items.Count;
? ? ? ? ? ? int columnNum = listView.Items[0].SubItems.Count;
? ? ? ? ? ? int rowIndex = 1;
? ? ? ? ? ? int columnIndex = 0;
? ? ? ? ? ? if (rowNum == 0 || string.IsNullOrEmpty(strFileName))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? if (rowNum > 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
? ? ? ? ? ? ? ? if (xlApp == null)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? MessageBox.Show("無(wú)法創(chuàng)建excel對(duì)象,可能您的系統(tǒng)沒(méi)有安裝excel");
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? xlApp.DefaultFilePath = "";
? ? ? ? ? ? ? ? xlApp.DisplayAlerts = true;
? ? ? ? ? ? ? ? xlApp.SheetsInNewWorkbook = 1;
? ? ? ? ? ? ? ? Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
? ? ? ? ? ? ? ? //將ListView的列名導(dǎo)入Excel表第一行
? ? ? ? ? ? ? ? foreach (ColumnHeader dc in listView.Columns)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? columnIndex++;
? ? ? ? ? ? ? ? ? ? xlApp.Cells[rowIndex, columnIndex] = dc.Text;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //將ListView中的數(shù)據(jù)導(dǎo)入Excel中
? ? ? ? ? ? ? ? for (int i = 0; i < rowNum; i++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? rowIndex++;
? ? ? ? ? ? ? ? ? ? columnIndex = 0;
? ? ? ? ? ? ? ? ? ? for (int j = 0; j < columnNum; j++)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? columnIndex++;
? ? ? ? ? ? ? ? ? ? ? ? //注意這個(gè)在導(dǎo)出的時(shí)候加了“\t” 的目的就是避免導(dǎo)出的數(shù)據(jù)顯示為科學(xué)計(jì)數(shù)法寿弱⊥冶幔可以放在每行的首尾。
? ? ? ? ? ? ? ? ? ? ? ? xlApp.Cells[rowIndex, columnIndex] = Convert.ToString(listView.Items[i].SubItems[j].Text) + "\t";
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //例外需要說(shuō)明的是用strFileName,Excel.XlFileFormat.xlExcel9795保存方式時(shí) 當(dāng)你的Excel版本不是95脖捻、97 而是2003阔逼、2007 時(shí)導(dǎo)出的時(shí)候會(huì)報(bào)一個(gè)錯(cuò)誤:異常來(lái)自 HRESULT:0x800A03EC。 解決辦法就是換成strFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal地沮。
? ? ? ? ? ? ? ? xlBook.SaveAs(strFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
? ? ? ? ? ? ? ? xlApp.Quit();
? ? ? ? ? ? ? ? xlBook = null;
? ? ? ? ? ? ? ? MessageBox.Show("OK");
? ? ? ? ? ? }
excel導(dǎo)出時(shí)會(huì)出現(xiàn)一個(gè)問(wèn)題:整個(gè)程序 退出后,導(dǎo)出的excel文件依然會(huì)在windows進(jìn)程中存在,如果用戶對(duì)excel多次進(jìn)行導(dǎo)出操作,則會(huì)對(duì)程序帶來(lái)影響.
解決方法:導(dǎo)出excel之后調(diào)用excel.application xlApp中的quit()方法