您的位置:首页 > 其它

import export data from DataTable

2011-08-16 23:50 218 查看
CSV

1. return a string

public string ToStringAsCSV (DataTable dt, string delimited)
{
string text = "";

StringWriter sw = new StringWriter();

// First we will write the headers.

//DataTable dt = m_dsProducts.Tables[0];

int iColCount = dt.Columns.Count;

for (int i = 0; i < iColCount; i++)
{
sw.Write(dt.Columns[i]);

if (i < iColCount - 1)
{
sw.Write(delimited);
}
}

sw.Write(sw.NewLine);

// Now write all the rows.

foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < iColCount; i++)
{
//if (!Convert.IsDBNull(dr[i]))
//{
string s = dr[i].ToString().Trim();
sw.Write(s);
//}

if (i < iColCount - 1)
{
sw.Write(delimited);
}
}
sw.Write(sw.NewLine);
}

text = sw.ToString();

return text;
}

2 create a CSV file

private void DataTableExportCSV(DataTable dt, string delimited, string strFilePath)
{
// Create the CSV file to which grid data will be exported.

StreamWriter sw = new StreamWriter(strFilePath, false);

// First we will write the headers.

//DataTable dt = m_dsProducts.Tables[0];

int iColCount = dt.Columns.Count;

for (int i = 0; i < iColCount; i++)
{
sw.Write(dt.Columns[i]);

if (i < iColCount - 1)
{
sw.Write(delimited);
}
}

sw.Write(sw.NewLine);

// Now write all the rows.

foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < iColCount; i++)
{
//if (!Convert.IsDBNull(dr[i]))
//{
string s = dr[i].ToString().Trim();
sw.Write(s);
//}

if (i < iColCount - 1)
{
sw.Write(delimited);
}
}
sw.Write(sw.NewLine);
}
sw.Close();
}


XML

1. return a string

public string ToStringAsXml(DataTable dt)
{
StringWriter sw = new StringWriter();
dt.WriteXml(sw, XmlWriteMode.IgnoreSchema);

string s = sw.ToString();

return s;
}


File import export manager CSV, XML

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using riteweigh.core.interfaces;
using SimpleEventBroker;
using riteweigh.core.framework;
using System.Data;
using System.IO;

namespace riteweigh.data.importExport
{
public class FileDataExportImportManager : IFileDataExportImportManager
{
#region IManager Members
[Publishes(RWCommands.UserNotAuthorised)]
public event EventHandler NotAuthorised;

#region private fields
private string[] _permissions = { };
#endregion

public string ModuleName
{
get { return "FileDataExportImport"; }
}

public string[] GetModulePermissions()
{
return _permissions;
}

#endregion

#region IFileDataExportImportManager Members

public void ExportToFile(DataSet dataSet, string filePath, string format, string delimiter)
{
var data = SerialiseDataSet(dataSet, format, delimiter);
using (var fileStream = new StreamWriter(filePath, false))
{
fileStream.Write(data);
fileStream.Close();
}
}

public string SerialiseDataSet(DataSet dataSet, string format, string delimiter)
{
/// Code migrated from UserControl_ExportData.cs
///
var data = string.Empty;

if (format.Equals("CSV", StringComparison.InvariantCultureIgnoreCase))
data = GetCSV(dataSet, delimiter);
else if (format.Equals("XML", StringComparison.InvariantCultureIgnoreCase))
data = GetXML(dataSet);

return data;
}

public DataSet ImportFromFile(string filePath, string format, string delimiter)
{
// Code migrated from ImportDataForm.cs

DataSet ds = new DataSet();

var dt = new DataTable();

if (format.Equals("CSV", StringComparison.InvariantCultureIgnoreCase))
{
dt = GetDTFromCSV(filePath, delimiter, true);
}
else if (format.Equals("XML", StringComparison.InvariantCultureIgnoreCase))
{
dt = GetDTFromXML(filePath);
}

dt.TableName = "columns!";

if (dt.Rows.Count == 0)
{
throw new Exception("file is empty!");
}

ds.Tables.Add(dt);

return ds;
}

#endregion

#region private methods

private string GetCSV(DataSet dataSet, string delimiter)
{
// Create the CSV file to which grid data will be exported.
string text = string.Empty;
using (StringWriter sw = new StringWriter())
{

// First we will write the headers.
var dt = dataSet.Tables[0];

int iColCount = dt.Columns.Count;

for (int i = 0; i < iColCount; i++)
{
sw.Write(dt.Columns[i]);

if (i < iColCount - 1)
{
sw.Write(delimiter);
}
}

sw.Write(sw.NewLine);

// Now write all the rows.

foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < iColCount; i++)
{
string s = dr[i].ToString().Trim();
sw.Write(s);

if (i < iColCount - 1)
{
sw.Write(delimiter);
}
}
sw.Write(sw.NewLine);
}

text = sw.ToString();

sw.Close();
}

return text;
}

private string GetXML(DataSet dataSet)
{
string text = string.Empty;
using (StringWriter sw = new StringWriter())
{
dataSet.WriteXml(sw);
text = sw.ToString();

sw.Close();
}

return text;
}

private DataTable GetDTFromCSV(string filePath, string delimiter, bool isRowOneHeader)
{
DataTable dt = new DataTable();
string[] spliters = new string[] { delimiter };

String[] linesArray = File.ReadAllLines(filePath);

//if no data in file ‘manually’ throw an exception
if (linesArray.Length == 0)
{
throw new Exception("File is empty!");
}

List<string> lines = linesArray.ToList<string>();

for (int i = lines.Count - 1; i >= 0; i--)
{
if (string.IsNullOrEmpty(lines[i].Trim()))
{
lines.Remove(lines[i]);
}
}

if (lines.Count == 0)
{
throw new Exception("File is empty lines!");
}

String[] lineValue = lines[0].Split(spliters, StringSplitOptions.None);

int Cols = lineValue.Length;

int index = 0;

if (isRowOneHeader)
{
for (int i = 0; i < Cols; i++)
dt.Columns.Add(lineValue[i].ToLower(), typeof(string));

index = 1;
}

DataRow Row;

for (int i = index; i < lines.Count; i++)
{
lineValue = lines[i].Split(spliters, StringSplitOptions.None);
Row = dt.NewRow();
for (int f = 0; f < Cols; f++)
Row[f] = lineValue[f];

dt.Rows.Add(Row);
}

return dt;
}

private DataTable GetDTFromXML(string filePath)
{
DataTable dt = new DataTable();

DataSet ds = new DataSet();
ds.ReadXml(filePath);

if (ds.Tables[0].Rows.Count == 0)
{
throw new Exception("File is empty!");
}

dt = ds.Tables[0].Copy();
return dt;
}

#endregion
}
}


// Get DataSet from excel sheets

public static DataSet importExcelToDT(string fileName, bool firstRowIsHeader)
{
DataSet ds = new DataSet();
try
{
Excel.Application xlApp = new Excel.ApplicationClass();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(fileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

int rCnt = 0;
int cCnt = 0;
try
{

for (int i = 1; i <= xlWorkBook.Worksheets.Count; i++)                      // loop sheets
{

Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(i);

string sheetName = xlWorkSheet.Name;
//if (sheets.Contains("All"))
//{
//    // read all sheets
//}
//else
//{
//    if (!sheets.Contains(sheetName))
//    {
//        log.Info("Programm skip reading sheet: " + sheetName);
//        continue;
//    }
//}

//log.Info("start reading " + sheetName);

Excel.Range range = xlWorkSheet.UsedRange;
if (range.Rows.Count == 1 && range.Columns.Count == 1)                   // skip sheet which no data
{
//log.Info("Programm skip reading sheet: " + sheetName);
continue;
}

DataTable dt = new DataTable(sheetName);
try
{

int lineNo = 0;

for (rCnt = 1; rCnt <= range.Rows.Count; rCnt ++)                    // loop rows
{
lineNo = rCnt;

//// skip the some rows (comment) by first cell of each row
if ((range.Cells[rCnt, 1] as Excel.Range).Value2 == null)
{
continue;
}

string firsCell = (range.Cells[rCnt, 1] as Excel.Range).Value2.ToString();
if (firsCell.StartsWith("#") )//|| (String.IsNullOrEmpty(firsCell)) )
{
continue;
}

////set columns header
//if (firsCell.StartsWith("!"))       //if (rCnt == 1)
//{
//    for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
//    {
//        string title = ((string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2).Trim('!', ' ');
//        dt.Columns.Add(new DataColumn(title));
//    }
//    continue;
//}

if (firstRowIsHeader)     // set columns header
{

for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
{
if (((range.Cells[rCnt, cCnt] as Excel.Range).Value2) == null)
{
break;
}
string title = ((string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2).Trim('!', ' ');
dt.Columns.Add(new DataColumn(title));
}
firstRowIsHeader = false;
continue;
}

//string[] array = new string[range.Columns.Count];       based on excel range
//for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)

string[] array = new string[dt.Columns.Count];       // based on DataTable range
for (cCnt = 1; cCnt <= dt.Columns.Count; cCnt++)             // loop columns
{
object res;
try
{
res = ((range.Cells[rCnt, cCnt] as Excel.Range).Value2);
if (res != null)
{
array[cCnt - 1] = res.ToString().Trim();
}
else
{
array[cCnt - 1] = "";
}

}
catch (Exception e)
{
//log.Error("Read EXCEL Error: " + sheetName + " line + " + lineNo);
Console.WriteLine(e.Message);
}
}

DataRow dr;
dt.BeginLoadData();
dr = dt.LoadDataRow(array, true);
dt.EndLoadData();

}
}
finally
{
releaseObject(xlWorkSheet);
//log.Info("finish reading " + sheetName + " sheet.");
}

ds.Tables.Add(dt);
}

return ds;
}
finally
{

//***********
xlApp.Quit();
//************

releaseObject(xlWorkBook);
releaseObject(xlApp);

//log.Info("Finish reading Excel");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
//log.Error(e.Message);
}

return null;
}

private static void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
}
finally
{
GC.Collect();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: