最近的项目要频繁将数据导入导出,有将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();
}
}