C#读写Excel
admin
2024-02-16 16:18:28
0

文章目录

    • 环境准备
    • Excel写入
    • Excel读取

环境准备

首先,右键解决方案的依赖项->添加项目引用,搜索Excel,选中Microsoft Excel 16.0 Object Library->点击确定。

然后在源文件中添加命名空间

using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.Runtime.InteropServices;//导入dll

本教程使用了.Net6.0的顶层语句,所以不需要再导入诸如Core之类的,直接开撸代码。下面通过C#实现对Excel的读写

Excel写入

为了重点突出重点,下面争取用最短的代码,写一个将多维数组写入Excel并保存的函数

void dataToExcel(double[,] data, string outName)
{//创建一个Excel程序Excel.Application app = new Excel.Application();//在app中创建一个xlsx文件  wbkExcel._Workbook wbk = app.Workbooks.Add(true);//选中wbk中的第一个sheetExcel._Worksheet whs = wbk.Sheets[1];//激活whswhs.Activate();//将二维数组中的数据写入whs这个sheetfor (int i = 0; i < data.GetLength(0); i++)for (int j = 0; j < data.GetLength(1); j++)whs.Cells[i + 1, j + 1] = data[i, j].ToString();//将wbk另存为outNamewbk.SaveAs(outName);//关闭wbkwbk.Close();//退出Excel程序app.Quit();
}double[,] data = new double[5, 5];
// 获取当前工作路径
string path = System.Environment.CurrentDirectory;
// 输出文件的路径
path = Path.Combine(path, "test.xlsx");
dataToExcel(data, path);
Console.WriteLine($"输出到{path}");

这里需要建立起对Excel中数据组织的一个概念,首先是Excel软件,一个软件可以打开多个xlsx文件,每个文件中对应多个sheet,每个sheet中有多个单元格,对应关系如下表所示。

ExcelExcel.exetest.xlsxsheet1A1
C#appwbkwhswhs.Cells[1,1]

而通过这样一个简单的例程,也就理解了C#操作Excel的基本流程:打开->操作->关闭。

其打开流程,包括打开Excel程序、打开Excel文件以及打开sheet;关闭则包括关闭Excel文件和Excel程序。

Excel读取

读取与写入的流程相似,但写入时需要至少有一个Excel文件,刚好刚刚创建了一个

void readExcel(string inName)
{var app = new Excel.Application();var wbk = app.Workbooks.Add(inName);//app.Visible = true;var sh = wbk.Sheets[1];sh.Activate();Console.WriteLine("您打开了" + sh.Name);Console.WriteLine($"本sheet共有{sh.Rows.Count}行,{sh.Columns.Count}列");var usedRange = sh.UsedRange.CurrentRegion;for (int i = 0; i < usedRange.Rows.Count; i++){for (int j = 0; j < usedRange.Columns.Count; j++)Console.Write($"{sh.Cells[i + 1, j + 1].Text} ");Console.Write("\n");}wbk.Close();app.Quit();
}string path = System.Environment.CurrentDirectory;
path = Path.Combine(path, "test.xlsx");
readExcel(path);

命令行中输出结果为

您打开了Sheet1
本sheet共有1048576行,16384列
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

其中,app.Visible = true;时,Excel软件会被打开。

sh.Rows.Count, sh.Columns.Count分别表示总行数和总列数,一般就是最大行和最大列。

sh.UsedRange.CurrentRegion表示已写入的区域,其对应的行数和列数就比较有代表性,根据这两个值进行循环,就可以把刚刚写入的数据打印出来了。

相关内容

热门资讯

《披荆斩棘的哥哥》正在热播,看... 《披荆斩棘的哥哥》正在热播,看完这档节目后你有什么观后感?看完这档节目之后,我觉得挺好的,这次的节目...
我女儿的生辰八字:壬午年 丙... 我女儿的生辰八字:壬午年 丙午月 丙寅日 庚寅时 (2002年6月27日农历五月十七日早上...
点读机什么品牌好啊,怎么选啊? 点读机什么品牌好啊,怎么选啊?步步高点读机比较好,选大商场的正品,不要上网或电子市场买。
吴用只是个文弱书生,李逵为何会... 吴用只是个文弱书生,李逵为何会对他言听计从?尽管吴用只是一个文弱书生,但他对李逵忠心耿耿,所以李逵会...
开心星星球里甜心超人魔方玩了4... 开心星星球里甜心超人魔方玩了4秒是哪一集39集,新人。。。第四部《甜心超人的新爱好》
为什么会乐极生悲? 为什么会乐极生悲?从易经的观点看,任何事物都是相对立的。有生就有死,又高就有矮,有长久有段,同样,有...
一千零一夜中给国王讲故事的人是... 一千零一夜中给国王讲故事的人是谁山鲁佐德在《一千零一夜》中给萨桑王国国王讲故事的那位女性就是:萨桑王...
发生在别人身上是故事发生在自己... 发生在别人身上是故事发生在自己身上是事故是什么意思?这句话的意思是:友唯别人的经历或事件通常被视为故...
怎么判断一个人是否是精神病(狂... 怎么判断一个人是否是精神病(狂躁型)?看是不是很小很普通的事、甚至没有什么事,就大发脾气,做出各种过...
夜问丨天菩萨,“贵州省汤”竟然... 今日小暑,标志着盛夏的登场。这样的天气下,来上一口“贵州省汤”,你会不自觉感叹:天菩萨,怎么能这么鲜...
精酿“魔术师”沈高彬:让贵州风... 当精酿啤酒的醇厚撞上贵州风物的独特,会碰撞出怎样的味觉奇遇?在贵阳,曾是繁华都市调酒师的沈高彬,以匠...
有哪位朋友买过学而第一国学听读... 有哪位朋友买过学而第一国学听读机,好不好用是国内第一家做国学机的,产品,售后没得黑。国学机至今也有8...
女生说今天好热啊该怎么回复 女生说今天好热啊该怎么回复高情商回复如下:1、“你很热吗,那我给你讲个冷笑话中和一下吧,然后你就找个...
一家人过河的问题 一家人爸爸 ... 一家人过河的问题 一家人爸爸 妈妈 2儿子 2女儿 一个管家 一条狗爱因斯坦的智力题目得买7张票,宠...
作为强国一代的青年大学生,在宏... 作为强国一代的青年大学生,在宏伟壮阔的科技强国梦中应该有着怎样的使命和担当?作为强国一代的青年大学生...
催眠大师的电影里所用到的心理学... 催眠大师的电影里所用到的心理学常识和原理是什么?《催眠大师》的引导方式是瞬间催眠,在现实人群中只有少...
我是个什么样的人,谁能帮我分析... 我是个什么样的人,谁能帮我分析一下,谢谢了?自己是什么样的人,没有和你接触,没有和你交往过,肯定不会...
求桔子树的早期作品集 求桔子树的早期作品集《片段》《妖孽并出》《暗涌》《Ne me quitte pas》《左右之间》《我...
一个人一个世界 那两个人几个世... 一个人一个世界 那两个人几个世界?一个人一个世界,两个人也是一个世界,因为(另一个)是他喜欢的人,他...
巨魔盗贼PVP 怎么样? 巨魔盗贼PVP 怎么样?同上可以说没有优势~PVE还行~是要看种族天赋的~