最近的項目要頻繁將數據導入導出,有將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();
}
}