與DataTable有關的數據導入導出

 

        最近的項目要頻繁將數據導入導出,有將DataTable中的數據導出爲txt或者csv文本文件以及EXCEL文件的,也有將txt或者csv文本文件以及EXCEL文件的數據讀取到DataTable中的,在這裏我把代碼寫出來供大家參考談論一下吧。

        將DataTable中的數據導出到文本文件,代碼如下:

        private void dataTableExportToText(DataTable dt, string filename)
        {
            StringBuilder sb = new StringBuilder();
            StreamWriter streamWrite = null;

            try
            {
                // 如果存在要保存的文件,則刪除
                if (File.Exists(filename))
                {
                    File.Delete(filename);
                }
                // 創建文件
                FileInfo file = new FileInfo(filename);
                streamWrite = file.CreateText();
                if (dt != null)
                {
                    // 寫數據
                    string dataLine = null;
                    string value = null;
                    int columnCount = dt.Columns.Count;
                    foreach (DataRow dr in dt.Rows)
                    {
                        for (int j = 0; j < columnCount; j++)
                        {
                            value = dr[j].ToString().Trim();
                            if (value == null || value == string.Empty)
                            {
                                value = "?";
                            }
                            sb.Append(value + ",");
                        }
                        dataLine = sb.ToString().Trim();
                        // 按行寫入數據
                        streamWrite.WriteLine(dataLine.Substring(0, dataLine.Length - 1));
                        sb.Remove(0, sb.Length);
                    }
                }
            }
            catch (IOException ioEx)
            {
                throw ioEx;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                streamWrite.Close();
            }
        }

 

       將文本文件中的數據導入到DataTable中,代碼如下:

       private void textDataImportToDataTable(DataTable resultDataTable, string resultFilePath)
        {
            StreamReader readFile = null;
            string dataLine = null;
            string[] dataArray = null;

            try
            {
                // 創建存儲結果的表結構
                createResultDataTable(resultDataTable);
                // 讀取結果文件
                readFile = new StreamReader(resultFilePath);
                // 按行讀取結果文件
                while ((dataLine = readFile.ReadLine()) != null)
                {
                    dataArray = dataLine.Split(new char[] { ',' });
                    // 向新建表中加入數據
                    addDataToTable(dataArray, resultDataTable);
                }
                // 如果讀取數據失敗
                if (resultDataTable.Rows.Count == 0)
                {
                    DataColumn dc = new DataColumn("Error");
                    resultDataTable.Columns.Add(dc);
                    DataRow dr = resultDataTable.NewRow();
                    dr[0] = "處理失敗!/n請檢查源文件或者算法是否正確!";
                    resultDataTable.Rows.Add(dr);
                }
            }
            catch (IOException ioEx)
            {
                throw ioEx;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (readFile != null)
                {
                    readFile.Close();
                    readFile = null;
                }
            }

        private void createResultDataTable(DataTable resultDataTable)
        {
            DataColumn dc_1 = new DataColumn("序號");
            resultDataTable.Columns.Add(dc_1);

            DataColumn dc_2 = new DataColumn("列名");
            resultDataTable.Columns.Add(dc_2);

            DataColumn dc_3 = new DataColumn("分析結果");
            resultDataTable.Columns.Add(dc_3);
        }

        private void addDataToTable(string[] dataArray, DataTable resultDataTable)
        {
            DataRow dr = resultDataTable.NewRow();

            int count = dataArray.Length;
            for (int i = 0; i < count; i++)
            {

                dr[i] = dataArray[i].Trim();
            }
            resultDataTable.Rows.Add(dr);
        }

 

       將DataTable中的數據導出成Excel文件格式,其代碼如下:

       public static void dataTableExportToExcel(DataTable dt, string fileName)
        {
            Microsoft.Office.Interop.Excel.Application m_objExcel = null;
            Microsoft.Office.Interop.Excel.Workbooks m_objWorkBooks = null;
            Microsoft.Office.Interop.Excel.Workbook m_objWorkBook = null;
            Microsoft.Office.Interop.Excel.Sheets m_objWorkSheets = null;
            Microsoft.Office.Interop.Excel.Worksheet m_objWorkSheet = null;
            try
            {
                // 查找是否有Excel的進程被打開
                System.Diagnostics.Process[] arrProcesses;
                arrProcesses = System.Diagnostics.Process.GetProcessesByName("Excel");
                // 如果有打開的Excel進程,那麼就關掉該進程
                foreach (System.Diagnostics.Process myProcess in arrProcesses)
                {
                    myProcess.Kill();
                }
                // 給變量賦值
                Object missing = Missing.Value;
                m_objExcel = new Microsoft.Office.Interop.Excel.Application();
                m_objWorkBooks = m_objExcel.Workbooks;
                m_objWorkBook = m_objWorkBooks.Add(true);
                m_objWorkSheets = m_objWorkBook.Sheets; ;
                m_objWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)m_objWorkSheets[1];
                // 在Excel表中第一行寫入列名
                int intFeildCount = dt.Columns.Count;
                for (int col = 0; col < intFeildCount; col++)
                {
                    m_objWorkSheet.Cells[1, col + 1] = dt.Columns[col].ToString();
                }
                // 在列名下對應寫入數據
                for (int intRowCount = 0; intRowCount < dt.Rows.Count; intRowCount++)
                {
                    for (int intCol = 0; intCol < dt.Columns.Count; intCol++)
                    {
                        m_objWorkSheet.Cells[intRowCount + 2, intCol + 1] = dt.Rows[intRowCount][intCol].ToString();
                    }
                }
                // 如果存在要保存的文件,則刪除
                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }
                // 保存Excel文件
                m_objWorkBook.SaveAs(fileName, missing, missing, missing, missing,
                                       missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
                                       missing, missing, missing, missing, missing);

            }
            catch (COMException comEx)
            {
                throw comEx;
            }
            catch (Exception ex)
            {
                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }
                throw ex;
            }
            finally
            {
                m_objExcel.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
                m_objExcel = null;
                GC.Collect();
            }
        }

 

        將Excel數據讀取或者導入DataTable中

        private void exportExcelToDataTable(string filePath, DataTable dataTable)
        {
            OleDbConnection conn = null;
            try
            {
                // 連接到Excel數據
                string strSource = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + filePath
                    + ";Extended Properties=Excel 8.0;Persist Security Info=true;";
                // 打開連接
                conn = new OleDbConnection(strSource);
                conn.Open();
                // 取數據並將其放入dataTable中
                string sqlstring = @"SELECT * FROM [Sheet1$]";
                OleDbDataAdapter adapter = new OleDbDataAdapter(sqlstring, conn);
                adapter.Fill(dataTable);
            }
            catch (IOException ioEx)
            {
                throw ioEx;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章