C#代码积累(1)类型互转

C#代码积累

一、 Excel文件读写 NPOI第三方库

读 从.xls文件保存为dataset,列名由list提供:
/// <summary>
        /// 从excel读取数据并存入dataset表中
        /// </summary>
        /// <param name="path">excel文件路径</param>
        /// <param name="cloumnNames">属性名称序列</param>
        /// <returns></returns>
        public static DataSet ReadingComplexExcel1(string path, List<string> cloumnNames)
        {
            DataSet ds = new DataSet();
            FileStream fs = File.OpenRead(@path);  //打开EXCEL文件
            {
                IWorkbook wk = null;
                if (path.Contains("xls"))
                {
                    wk = new HSSFWorkbook(fs);      //把文件信息写入wk 
                    //MessageBox.Show("若程序出错,请将EXCEL保存为2007版本以上");
                }
                else if (path.Contains("xlsx"))
                {
                    wk = new XSSFWorkbook(fs);
                    //MessageBox.Show("若程序出错,请将EXCEL保存为2007版本以下");
                }
                else
                {
                    MessageBox.Show("请选择Excel文件");
                }
                //---------------------
                for (int i = 0; i <= 0; i++)    //遍历文件中的表总数
                {
                    ISheet sheet = wk.GetSheetAt(i);  //读取当前表数据
                    DataTable dt = new DataTable(sheet.SheetName);
                    foreach (string cloumnName in cloumnNames)
                    {
                        dt.Columns.Add(cloumnName, typeof(String));
                    }
                    //dt.Columns.Add("paraname", typeof(String));
                    //dt.Columns.Add("paravalue", typeof(String));
                    for (int j = 0; j <= sheet.LastRowNum; j++)  //当前表总行数
                    {
                        //每次开始遍历表时刷新列表
                        //List_T List_T = new List_T();
                        dt.Rows.Add();
                        //DataRow drow = dt.NewRow();
                        IRow row = sheet.GetRow(j);
                        if (row != null)
                        {
                            ICell cell0 = row.GetCell(0);   //读取第一列数据(参数名)
                            if (cell0.ToString().Contains("null"))
                            { break; }
                            else
                            { dt.Rows[j][cloumnNames[0]] = cell0.ToString(); }

                            for (int k = 1; k < cloumnNames.Count; k++)
                            {
                                ICell cellk = row.GetCell(k);
                                if (cellk != null)
                                { dt.Rows[j][cloumnNames[k]] = cellk.ToString(); }
                                else
                                { dt.Rows[j][cloumnNames[k]] = "NA"; }
                            }
                            //ICell cell1 = row.GetCell(1);   //读取第二列数据(参数值)
                            //if (cell1 != null)
                            //{ dt.Rows[j]["paravalue"] = cell1.ToString(); }
                            //else
                            //{ dt.Rows[j]["paravalue"] = "NA"; }
                        }
                    }
                    //将表格放入dataset
                    ds.Tables.Add(dt);
                }
            }

            return ds;
        }
写 将datatable写入.xls文件:
 /// <summary>
        /// 将dt写入excel  可用
        /// </summary>
        /// <param name="path"></param>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string WritingComplexExcel2(string path, DataTable dt)
        {
            string savePath = null;
            try
            {
                HSSFWorkbook workbook2003 = new HSSFWorkbook(); //新建xls工作簿  
                workbook2003.CreateSheet("Sheet1");  //新建1个Sheet工作表
                HSSFSheet SheetOne = (HSSFSheet)workbook2003.GetSheet("Sheet1"); //获取名称为Sheet1的工作表
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    IRow row = SheetOne.CreateRow(i);
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        string val = dt.Rows[i][j].ToString();
                        row.CreateCell(j).SetCellValue(val);
                    }
                }
                if (!File.Exists(path))
                {
                    savePath = path;
                    FileStream file2003 = new FileStream(savePath, FileMode.Create);
                    workbook2003.Write(file2003);
                    file2003.Close();
                    workbook2003.Close();
                }
                else
                {
                    File.Delete(path);
                    savePath = path;
                    FileStream file2003 = new FileStream(savePath, FileMode.Create);
                    workbook2003.Write(file2003);
                    file2003.Close();
                    workbook2003.Close();
                }
                return savePath;
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.ToString());
                return savePath;
            }
        }

写 将类列表写入excel文件

/// <summary>
        ///  将类序列 写入excel文件 支持xls文件 无论类内部的属性如何定义
        /// </summary>
        /// <typeparam name="T">数据类型</typeparam>
        /// <param name="path">excel文件保存位置</param>
        /// <param name="schemaWalls">类列表</param>
        /// <returns></returns>
        public static string WritingComplexExcel1<T>(string path, List<T> schemaWalls)
        {
            try
            {
                string savePath = null;
                //获得所有列名
                List<string> columnNameList = schemaWalls[0].GetType().GetProperties().Select(t => t.Name).ToList();
                List<PropertyInfo> columnPropList = schemaWalls[0].GetType().GetProperties().Select(t => t).ToList();

                HSSFWorkbook workbook2003 = new HSSFWorkbook(); //新建xls工作簿  
                workbook2003.CreateSheet("Sheet1");  //新建1个Sheet工作表
                HSSFSheet SheetOne = (HSSFSheet)workbook2003.GetSheet("Sheet1"); //获取名称为Sheet1的工作表
                for (int i = 0; i < schemaWalls.Count; i++)
                {
                    IRow row = SheetOne.CreateRow(i);
                    for (int j = 0; j < columnPropList.Count - 1; j++)
                    {
                        //  MessageBox.Show(columnNameList[j].ToString());
                        // string val = schemaWalls[i].GetValue(columnNameList[j]).ToString();
                        string val = columnPropList[j].GetValue(schemaWalls[i]).ToString();
                        //MessageBox.Show(val);
                        row.CreateCell(j).SetCellValue(val);
                    }
                }
                if (!File.Exists(path))
                {
                    savePath = path;
                    FileStream file2003 = new FileStream(savePath, FileMode.Create);
                    workbook2003.Write(file2003);
                    file2003.Close();
                    workbook2003.Close();
                }
                else
                {
                    File.Delete(path);
                    savePath = path;
                    FileStream file2003 = new FileStream(savePath, FileMode.Create);
                    workbook2003.Write(file2003);
                    file2003.Close();
                    workbook2003.Close();
                }
                return savePath;
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.ToString());
                return null;
            }
        }

二、类与datatable互相拷贝

将类复制进入datatable

/// <summary>
        /// 将类复制进入datatable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="classes"></param>
        /// <returns></returns>
        public static DataTable WriteClassToDataTable<T>(List<T> classes) {
            try
            {
                string savePath = null;
                DataTable dt = new DataTable() ;
                //获得所有列名
                List<string> columnNameList = classes[0].GetType().GetProperties().Select(t => t.Name).ToList();
                List<PropertyInfo> columnPropList = classes[0].GetType().GetProperties().Select(t => t).ToList();
                foreach (string cloumnName in columnNameList)
                {
                    dt.Columns.Add(cloumnName, typeof(String));
                }       
                for (int i = 0; i < classes.Count; i++)
                {
                    dt.Rows.Add();
                     
                    for (int j = 0; j < columnPropList.Count - 1; j++)
                    {
                        //  MessageBox.Show(columnNameList[j].ToString());
                        //  string val = schemaWalls[i].GetValue(columnNameList[j]).ToString();
                        string val = columnPropList[j].GetValue(classes[i]).ToString();
                       dt.Rows[i][columnNameList[j]] = val;
                        //MessageBox.Show(val);
                        
                    }
                } 
                return dt;
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.ToString());
                return null;
            }
         
        }

将datatable复制进入类??

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值