import export data from DataTable

 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();
            }
        }





 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值