FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
12
返回列表 发新帖
楼主: 稀里哗啦
打印 上一主题 下一主题

EXCEL导入问题

[复制链接]
11#
发表于 2014-8-18 17:24:27 | 只看该作者
读取时,可以真接对GRID进行数据绑定.就会达到你想要的.
12#
发表于 2014-8-18 17:26:13 | 只看该作者
不需要任何第三方控件.我的项目中就使用的.
13#
 楼主| 发表于 2014-8-18 23:57:15 | 只看该作者
本帖最后由 稀里哗啦 于 2014-8-18 23:59 编辑
甘桂 发表于 2014-8-18 17:26
不需要任何第三方控件.我的项目中就使用的.

谢谢  我试试 求详细的样例程序
14#
 楼主| 发表于 2014-8-21 14:22:20 | 只看该作者
甘桂 发表于 2014-8-18 17:22
1通过FINIUI上传控件传到服务器上.记录上传的物理路径
2通过下面读到DATATABLE中
protected DataTable Inp ...

导入已经没问题了,但是功能不够强大,想问个复杂的,如果我想导入一个excel,有100条数据,80条有效数据,表里已经有10条了,如何只导入后,提示只导入70条,然后导入失败的那部分再弄一个Excel出来,并标注失败的原因
15#
发表于 2014-8-22 11:52:27 | 只看该作者
表里有数据时为了不重复导入必须有一个字段进行单独判断。或者拿几个关键字段出来进行判断。如果数据存在就NEXT.
try
{                {
导入数据代码部分
K+=1
}
catch (Exception ex)
                 {
                     Alert.ShowInTop("发生异常,数据已回滚\n信息\n'" + ex.Message + "'");

                 }
                 finally
                 {
                     Alert.ShowInTop("成功处理" + k + "条数据!");
                     btnSavedata.Enabled = false;
                 }
             }
            
16#
发表于 2014-8-22 11:56:44 | 只看该作者
标注失败的数据那还得向上传的EXCEL文件写数据找出二个表中不同的数据,
17#
发表于 2014-8-25 18:46:17 | 只看该作者
#region 数据批量导入
        protected string SaveTempFiels(FineUI.FileUpload fuload)
        {
            string strFileName = fuload.FileName.ToString();
            string strFilePath = "";

            strFileName = strFileName.Replace(":", "_").Replace(" ", "_").Replace("\\", "_").Replace("/", "_");
            strFileName = "StudentBaseInfo_" + DateTime.Now.Ticks.ToString() + "_" + strFileName;
            strFilePath = "~/UpFiles/TempFiles/" + strFileName;

            strFilePath = Server.MapPath(strFilePath);
            fuload.SaveAs(strFilePath);
            //fuload.Reset();

            return @strFilePath;

        }

        protected DataTable ExcelToDataTable(string excelFilePath)
        {

            if (File.Exists(excelFilePath))
            {
                using (FileStream stream = File.OpenRead(excelFilePath))
                {

                    HSSFWorkbook workbook = new HSSFWorkbook(stream);
                    HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(0);
                    DataTable table = new DataTable();
                    table.TableName = "导入信息";

                    HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
                    int cellCount = headerRow.LastCellNum;

                    for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                    {
                        if (headerRow.GetCell(i) == null || headerRow.GetCell(i).StringCellValue.Trim() == "")
                        {
                            // 如果遇到第一个空列,则不再继续向后读取
                            cellCount = i + 1;
                            break;
                        }
                        DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
                        table.Columns.Add(column);
                    }

                    for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
                    {
                        HSSFRow row = (HSSFRow)sheet.GetRow(i);
                        if (row == null || row.GetCell(0) == null || row.GetCell(0).ToString().Trim() == "")
                        {
                            // 如果遇到第一个空行,则不再继续向后读取
                            break;
                        }

                        DataRow dataRow = table.NewRow();
                        for (int j = row.FirstCellNum; j < cellCount; j++)
                        {
                            dataRow[j] = row.GetCell(j);
                        }
                        table.Rows.Add(dataRow);
                    }

                    stream.Close();
                    workbook = null;
                    sheet = null;
                    return table;
                }
            }
            else
            {
                return null;
            }
        }

        protected DataSet ValidateUserTable(DataTable dt)
        {                                             
            // 如果除表头外有数据
            if (dt.Rows.Count > 0)
            {
                DataSet ds = new DataSet();
                bool isCorrect = false;
               
                string strDrValue = "";     ///  值
                string strFieldName = "";   ///  字段名
                string strMessage = "";     ///  错误信息
               
                string[] arrstrList = new string[] { "", "" };

                DataTable dtTable = new DataTable();   // 错误信息表
                dtTable.Columns.Add("错误行号", typeof(string));
                dtTable.Columns.Add("原数据", typeof(string));
                dtTable.Columns.Add("错误信息", typeof(string));

                #region 验证各列的值
                // 遍历行
                for (int i = 0; i < dt.Rows.Count; i++)  // i=0 为表头
                {
                    DataRow dr = dt.Rows[i];

                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        isCorrect = true;
                        strDrValue = dr[j].ToString().Trim();
                        strFieldName = dt.Columns[j].ToString().Trim();

                        #region 遍历列并进行验证
                        switch (j)
                        {...}



                   }

                }
                #endregion
               
                dt.TableName = "导入信息";
                ds.Tables.Add(dt);
                if (dtTable.Rows.Count>0)
                {
                    dtTable.TableName = "错误信息";
                    ds.Tables.Add(dtTable);
                }
                return ds;
            }
            else
            {
                return null;
            }
            
        }  
18#
发表于 2014-8-26 16:11:40 | 只看该作者
lqf20908 发表于 2014-8-25 18:46
#region 数据批量导入
        protected string SaveTempFiels(FineUI.FileUpload fuload)
        {

if (row == null || row.GetCell(0) == null || row.GetCell(0).ToString().Trim() == "")
                        {
                            // 如果遇到第一个空行,则不再继续向后读取
                            break;
                        }
请问一下:你这个是指某一个单元格是空的时候就不再往后读取吧?如果某个单元格允许空,其它单元格不空时,就会导致某行漏读取了哦。最好能判断整行为空时不再往下面读取
19#
发表于 2014-8-26 20:21:03 | 只看该作者
Mr.Wu 发表于 2014-8-26 16:11
if (row == null || row.GetCell(0) == null || row.GetCell(0).ToString().Trim() == "")
             ...

这个是根据我自己项目需要而进行的判断,你可以修改。
if (row == null || row.GetCell(0) == null || row.GetCell(0).ToString().Trim() == "")
某一行的第一列不为空,不是所有的列。
我的EXCEL需要保证第一列永远不为空,比如我的第一列就是”姓名“。

20#
 楼主| 发表于 2014-8-27 07:48:39 | 只看该作者
lqf20908 发表于 2014-8-25 18:46
#region 数据批量导入
        protected string SaveTempFiels(FineUI.FileUpload fuload)
        {

我尝试一下,先说声谢谢,稍后来反馈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-29 02:52 , Processed in 0.045506 second(s), 12 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表