import export data from DataTable
2011-08-16 23:50
218 查看
CSV
1. return a string
2 create a CSV file
XML
1. return a string
File import export manager CSV, XML
// Get DataSet from excel sheets
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(); } }
相关文章推荐
- How to export/import data with LOB type from one user/schema to another
- DacImportExportCli : Import / Export Data from SQL Azure to SQL Server (vice versa)
- Export and Import Trace Data
- Export data from Sharepoint site
- IMPORT/EXPORT DATA
- Export the table decribe from oracle data dictionary
- 内存变量 Export / Import ...To Memory ID 'ID_Name' / From Memory ID 'ID_Name' 导出/读取的使用
- get row data value& datatable filter & new datatable from datatable
- Export and Import Data Records in Small Numbers Situation
- Importing multi-valued field into Solr from mySQL using Solr Data Import Handler
- 【MongoDB】mongoimport and mongoexport of data (二)
- Import Data from Txt or CSV files into MYSQL database tables
- how to use Sqoop to import/ export data
- 1.3 Quick Start中 Step 7: Use Kafka Connect to import/export data官网剖析(博主推荐)
- OS X Import data from local file to MySQL
- Export data from SQL Server to Excel
- Export/Import DataPump Parameter ACCESS_METHOD - How to Enforce a Method of Loading and Unloading Data ? [ID 552424.1]
- 使用datapump 导出导入同义词(export and import synonym using datapump)
- Oracle 10g 及之后导出/导入(Datapump Export/Import)工具
- Import Data from Excel to SQL Server