ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5250|回复: 20

[求助] 请教在C#中二维动态数组的写法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-27 19:45 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 crystal0330 于 2018-8-27 19:46 编辑

首先声明,我经常用到的二维动态数组的列是确定的,而行数是不确定的,我尝试了用list和一维数组结合写了一下,不过是错的代码如下,烦请各位更正:

  1. static void Main(string[] args)
  2.         {
  3.             Excel.Application excel = new Excel.Application();
  4.             Excel.Workbook wb = excel.Workbooks.Open(@"d:\a.xls");
  5.             Excel._Worksheet sh = excel.Worksheets[1];
  6.             int rows = sh.get_Range("a2").get_End(Excel.XlDirection.xlDown).Row;
  7.             string[] arr = new string[3];
  8.             List<string[]> list = new List<string[]>();
  9.             for (int i = 2; i <= rows; i++)
  10.             {

  11.                 if (sh.Cells[i, 1].Value2 != null)
  12.                 {
  13.                     arr[0] = sh.Cells[i, 1].Value2;
  14.                     arr[1] = sh.Cells[i, 2].Value2;
  15.                     arr[2] = sh.Cells[i, 3].Value2;
  16.                     list.Add(arr);

  17.                 }

  18.             }

  19.         }
复制代码



TA的精华主题

TA的得分主题

发表于 2018-8-27 23:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Excel.Workbook wb = excel.Workbooks.Open(@"d:\a.xls");             Excel._Worksheet sh = excel.Worksheets[1];

TA的精华主题

TA的得分主题

发表于 2018-8-27 23:45 | 显示全部楼层
试一试:

Excel.Workbook wb = excel.Workbooks.Open(@"d:\a.xls");
Excel._Worksheet sh = wb.Worksheets[1];<<===

TA的精华主题

TA的得分主题

发表于 2018-8-28 20:52 | 显示全部楼层
按一楼的代码测试,只修改
原来的代码  Excel._Worksheet sh = excel.Worksheets [1];
修改后  Excel._Worksheet sh = wb.Worksheets [1]; << ===这一行.

TA的精华主题

TA的得分主题

发表于 2018-8-28 21:15 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-28 21:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
as42065300 发表于 2018-8-28 21:15
有list集合了干嘛还用数组?

我刚学的,所以弄不明白,可以告诉我,用LIST怎么写二维动态数组吗?谢谢

TA的精华主题

TA的得分主题

发表于 2018-8-28 21:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 as42065300 于 2018-8-28 22:22 编辑

我真的不明白为什么要将数组存入list集合中?一般list集合用来存放实体类。
string[] arr = new string[3] {"a", "b", "c" };
List<Object> obj = new List<object>();
obj.Add(arr);

数组我记得好像是object类型的。







TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-28 22:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
as42065300 发表于 2018-8-28 21:59
我真的不明白为什么要将数组存入list集合中?一般list集合用来存放实体类。
string[] arr = new string[3 ...

我要的是,遍历excel表格的非空行,然后将符合条件的逐行加入二维数组,我试了下你的代码,貌似跟我帖子开始的代码出现的错误一样,出来的二维数组每行的数据都是一样的,或者我理解有误。附上根据你的建议改的代码,请指正:
  1. Excel.Application excel = new Excel.Application();
  2.             excel.Visible = true;
  3.             Excel.Workbook wb = excel.Workbooks.Open(@"d:\a.xls");
  4.             Excel._Worksheet sh =wb.Worksheets[1];
  5.              int rows = sh.get_Range("a2").get_End(Excel.XlDirection.xlDown).Row;
  6.                 List<Object> arr= new List<object>();
  7.                 string[] brr = new string[3];
  8.                 for (int i = 2; i <= rows; i++)
  9.                 {
  10.                     if (sh.Cells[i, 1].Value2 != null)
  11.                     {
  12.                         brr[0] = sh.Cells[i, 1].Value2;
  13.                         brr[1] = sh.Cells[i, 2].Value2;
  14.                         brr[2] = sh.Cells[i, 3].Value2;
  15.                         arr.Add(brr);
  16.                     }
  17.                 }
复制代码

TA的精华主题

TA的得分主题

发表于 2018-8-28 22:53 | 显示全部楼层
本帖最后由 as42065300 于 2018-8-28 22:57 编辑

把你excl数据截图看看。你要将创建的数组放在循环内
List<Object> arr= new List<object>();
                for (int i = 2; i <= rows; i++)
                {
                    if (sh.Cells[i, 1].Value2 != null)
                    {
                                      string[] brr = new string[3];
                        brr[0] = sh.Cells[i, 1].Value2;
                        brr[1] = sh.Cells[i, 2].Value2;
                        brr[2] = sh.Cells[i, 3].Value2;
                        arr.Add(brr);
                    }
                }           

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-28 23:05 | 显示全部楼层
as42065300 发表于 2018-8-28 22:53
把你excl数据截图看看。你要将创建的数组放在循环内
List arr= new List();
                for (int i ...

原来差别在这里,你的代码我测试成功了,谢谢你,不过还有个问题,要如何将这个数组输出到excel表格呢?
我用arr.ToArray()方法,没东西输出
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 19:09 , Processed in 0.041283 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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