找回密码
 立即注册

QQ登录

只需一步,快速开始

kdw01

注册会员

4

主题

8

帖子

30

积分

注册会员

积分
30
kdw01
注册会员   /  发表于:2020-1-17 18:28  /   查看:3493  /  回复:7
2金币
需求实现:点击浏览按钮选择(*.xlsx)文件将图1Excle内容导入图2C1FlexGrid页面中。成功后,选择自己需要的每条数据前选中√,点击导入按钮保存到Oracle数据库中。各种查找只有一个例子但是不能代入:代码及运行如下
        void _btnLoadSheet_Click(object sender, System.EventArgs e)
        {
            // choose file
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.DefaultExt = "xls";
            dlg.FileName = "*.xls";
            if (dlg.ShowDialog() != DialogResult.OK)
                return;

            // clear data source, if any
            _flex.DataSource = null;
            string[] sheets = _flex.LoadExcelSheetNames(dlg.FileName);
            Console.WriteLine("Found {0} sheets in this book.", sheets.Length);
            foreach (string sheet in sheets)
            {
                Console.WriteLine(" - {0}", sheet);
            }

            // load the first sheet in the book
            FileFlags flags = (_chkFixed.Checked)? FileFlags.IncludeFixedCells: FileFlags.None;
            _flex.LoadGrid(dlg.FileName, FileFormatEnum.Excel, flags);
        },其他的都是C1FlexGrid导出到Excel中。各位大神们帮帮忙啦,怎么才能实现我的需求呢!


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

7 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-1-19 10:47:17
沙发
excel导入flexgrid中只需要用_flex.Load方法即可,

需要注意的是,要引用C1.Win.C1flexgrid.ImportExport.dll,才可以使用这个方法
回复 使用道具 举报
kdw01
注册会员   /  发表于:2020-1-19 17:38:55
板凳
Richard.Ma 发表于 2020-1-19 10:47
excel导入flexgrid中只需要用_flex.Load方法即可,

需要注意的是,要引用C1.Win.C1flexgrid.ImportExpor ...

谢谢您了,请问C1.Win.C1flexgrid.ImportExport.dll在哪里能下载,我电脑中所有文件都没有,网上也没有查到。我项目中引用的是C1.Win.C1FlexGrid.4
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-1-21 09:45:18
地板



我看你在另一个帖子中也问到了,已经给你回复,这两个dll不会冲突的,同属于C1.Win.C1flexgrid这个命名空间

dll你可以在vs项目中添加dll,直接在扩展页中找,也可以在产品安装的文件夹下面找,默认的是在C:\Program Files (x86)\ComponentOne\WinForms Edition\bin\v4.5.2

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
kdw01
注册会员   /  发表于:2020-1-21 16:35:14
5#
Richard.Ma 发表于 2020-1-21 09:45
我看你在另一个帖子中也问到了,已经给你回复,这两个dll不会冲突的,同属于C1.Win.C1flexgrid这个命 ...

好的谢谢,但是我用的是vs10版的,没有扩展功能,同样在您说的这个路径中也没有找到,并且通过关键词检索文件也没有该dll文件。现在我重新下载一个ComponentOne看能否解决问题
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-1-21 17:37:22
6#
需要和你确认一下你这边的C1版本,如果是2019以前的版本的话,是不需要引用的,包含在C1.Win.C1flexgrid.dll中

直接调用_flex.Load方法就行
回复 使用道具 举报
kdw01
注册会员   /  发表于:2020-1-22 14:11:58
7#
Richard.Ma 发表于 2020-1-21 17:37
需要和你确认一下你这边的C1版本,如果是2019以前的版本的话,是不需要引用的,包含在C1.Win.C1flexgrid.dl ...

你好,但是用您说的LoadExcel方法运行的效果还是如正文上图的最后一张图片效果相同,把选择这一列条目给覆盖了,同时选择这一行也是被覆盖了,我想要的效果是将Excel的数据插入到我规划的格式中,而不是直接将Excel导入覆盖我规划的格式。希望您这边可以帮忙给一个更好的解答。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-1-22 17:41:32
8#
我明白你的意思了,但是目前这个没有办法直接实现,Flexgrid更适合于比较规范的excel加载(不包含合并单元格,一列里每行的数据格式相同)
以你的excel文件为例,并没有办法判断第一行为标题,第二行为表头,所以都会全部加载
而且C1没有提供加载excel部分区域的方法

因此按照你这边的需求,只能是先在后台加载excel,
你这边如果excel里的数据格式固定的,可以选择使用另外一个flexgrid(在后台代码创建,不在界面显示),只用它来加载excel,然后通过后台代码来获取数据,然后将数据插入datatable后,再绑定给界面上的flexgrid

另一个办法是用C1Excel来在后台加载,然后在后台对数据整理成datatable后再绑定给flexgrid,单元格值为null时,说明这个单元格已经被合并

  1.             c1XLBook1.Load(@"E:\Users\MLX\Desktop\111.xlsx");
  2.             XLSheet sheet= c1XLBook1.Sheets[0];

  3.             for(int i=0;i<sheet.Rows.Count;i++) {
  4.                 for(int j = 0; j < sheet.Columns.Count; j++)
  5.                 {
  6.                     var cellvalue = sheet[i, j].Value;
  7.                 }
  8.             }
复制代码



工具箱中拖入这个控件即可使用C1excel中的c1XLBook

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部