【机房收费系统C#版】——导出Excel
前言
机房合作開始好长了一段时间。反重复复开了几次会,项目也是一拖再拖,作为组长。有80%的责任都在于我。为了不让这个项目陪着我过春节。要求自己一定要在这几天敲完。
还是一样的问题,用C#敲,从一開始到如今,不论什么一个功能的实现都是现学现查。对于导出Excel表格这个功能来说更不是意外。在网上找了非常多资料,反重复复地做小demo,最终有了我想要的效果。
实现
首先是加入引用
然后在程序代码上加入using
<span style="font-size:18px;">using System;
using System.Data;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;</span>
在窗口上加入datagriview控件,加入列
然后能够依据自己的须要加入列数,也能够编辑列标题。
效果
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
代码实现
<span style="font-size:18px;"> private void Form2_Load(object sender, EventArgs e)
{ dgvAccectCash.AutoGenerateColumns = true;
dgvAccectCash.Columns[0].HeaderText = "学号";
dgvAccectCash.Columns[1].HeaderText = "充值金额";
dgvAccectCash.Columns[2].HeaderText = "充值时间";
dgvAccectCash.Columns[3].HeaderText = "充值日期";
dgvAccectCash.Columns[4].HeaderText = "操作用户";
dgvAccectCash.Columns[5].HeaderText = "是否结账"; }</span>
定义两个函数,一个是将datagridview中的数据导入表中。一个是将datagridview中的数据导出到一张表中。
1、一个是将datagridview中的数据导入表中
<span style="font-size:18px;"> private DataTable exporeDataToTable(DataGridView dataGridView)
{
//将datagridview中的数据导入到表中
DataTable tempTable = new DataTable("tempTable");
//定义一个模板表,专门用来获取列名
DataTable modelTable = new DataTable("ModelTable");
//创建列
for (int column = 0; column < dgvAccectCash.Columns.Count; column++)
{
//可见的列才显示出来
if (dgvAccectCash.Columns[column].Visible == true)
{
DataColumn tempColumn = new DataColumn(dgvAccectCash.Columns[column].HeaderText, typeof(string));
tempTable.Columns.Add(tempColumn);
DataColumn modelColumn = new DataColumn(dgvAccectCash.Columns[column].Name, typeof(string));
modelTable.Columns.Add(modelColumn);
}
}
//加入datagridview中行的数据到表
for (int row = 0; row < dgvAccectCash.Rows.Count; row++)
{
if (dgvAccectCash.Rows[row].Visible == false)
{
continue;
}
DataRow tempRow = tempTable.NewRow();
for (int i = 0; i < tempTable.Columns.Count; i++)
{
tempRow[i] = dgvAccectCash.Rows[row].Cells[modelTable.Columns[i].ColumnName].Value;
}
tempTable.Rows.Add(tempRow);
}
return tempTable;
}</span>
2、将datagridView中的数据导出到一张表中
<span style="font-size:18px;"> private void OutputAsExcelFile(DataGridView dataGridView)
{
//将datagridView中的数据导出到一张表中
DataTable tempTable = this.exporeDataToTable(dataGridView);
//导出信息到Excel表
// Microsoft.Office.Interop.Excel.ApplicationClass myExcel;
Microsoft.Office.Interop.Excel.ApplicationClass myExcel;
Microsoft.Office.Interop.Excel.Workbooks myWorkBooks;
Microsoft.Office.Interop.Excel.Workbook myWorkBook;
Microsoft.Office.Interop.Excel.Worksheet myWorkSheet;
char myColumns;
Microsoft.Office.Interop.Excel.Range myRange;
object[,] myData = new object[500, 35];
int i, j;//j代表行,i代表列
myExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
//显示EXCEL
myExcel.Visible = true;
if (myExcel == null)
{
MessageBox.Show("本地Excel程序无法启动!请检查您的Microsoft Office正确安装并能正常使用", "提示");
return;
}
myWorkBooks = myExcel.Workbooks;
myWorkBook = myWorkBooks.Add(System.Reflection.Missing.Value);
myWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)myWorkBook.Worksheets[1];
myColumns = (char)(tempTable.Columns.Count + 64);//设置列
myRange = myWorkSheet.get_Range("A1", myColumns.ToString() + "5");//设置列宽
int count = 0;
//设置列名
foreach (DataColumn myNewColumn in tempTable.Columns)
{
myData[0, count] = myNewColumn.ColumnName;
count = count + 1;
}
//输出datagridview中的数据记录并放在一个二维数组中
j = 1;
foreach (DataRow myRow in tempTable.Rows)//循环行
{
for (i = 0; i < tempTable.Columns.Count; i++)//循环列
{
myData[j, i] = myRow[i].ToString();
}
j++;
}
//将二维数组中的数据写到Excel中
myRange = myRange.get_Resize(tempTable.Rows.Count + 1, tempTable.Columns.Count);//创建列和行
myRange.Value2 = myData;
myRange.EntireColumn.AutoFit();
}</span>
调用这两个函数实现导出Excel表格。
<span style="font-size:18px;"> private void button1_Click(object sender, EventArgs e)
{
exporeDataToTable(dgvAccectCash);//将datagridview中的数据导入到表中
OutputAsExcelFile(dgvAccectCash);//将datagridView中的数据导出到一张表中
}</span>
效果
问题
这里面还是有一些问题:"无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。
请改用适用的接口".百度了一下是由于引用里“Microsoft.Office.Interop.Excel”这个属性的问题,改动“嵌入互操作类型”true或false属性就好了。
总结
通过这个一小样例,感觉自己成长了不少,尽管在学习的过程中我们会遇到非常多问题。这些问题看起来非常困难。可是仅仅要我们学会站在巨人的肩膀上学习,给自己多一点耐心和信心,相信这些困难一定会成为我们成长路上的基石。
【机房收费系统C#版】——导出Excel的更多相关文章
- 机房收费系统合作版(三)——UI思索
案件追踪系统1.0暂告一段落.验收过程中.MR MI针对UI界面提出了很多自己的想法. 针对TGB项目的UI设计我也有我的感受: 1.不论大小项目.仅仅要一看界面准有70%到80%熟悉度. 2.一看这 ...
- 机房收费系统合作版(二)——初识Git
研究了一天半的Git.查阅了不少资料,这里将Git的运用分为两条线做个简单梳理:本地控制库.远程控制库. **************************************本地控制库**** ...
- VB.NET版机房收费系统---导出Excel表格
datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,能够显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件很easy和直观,大多数情 ...
- 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel
机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...
- 机房收费系统之导出Excel
刚开始接触机房收费的时候,连上数据库,配置ODBC,登陆进去,那窗体叫一个多,不由地有种害怕的感觉,但是有人说,每天努力一点点,就会进步一点点,不会的就会少一点点,会的就会多一点点.. ...
- VB.NET版机房收费系统---报表
报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...
- VB.NET版机房收费系统---七仙女之系统登录
VB.NET第一版机房收费系统,告一段落,验收的时候.问题也是大大的存在,没实用上设计模式,什么触发器.存储过程,都没实用上.看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍 ...
- VB.NET版机房收费系统---组合查询
查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...
- VB.NET版机房收费系统---异常处理
异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台 ...
随机推荐
- sql小计合计
转自:http://www.jb51.net/article/18860.htm 这里介绍sql server2005里面的一个使用实例: CREATE TABLE tb(province nvarc ...
- c++调用DOS命令,不显示黑屏
WinExec("Cmd.exe /C md c://12", SW_HIDE); 注释:/c是什么意思,不用/C会报错 CMD [/A | /U] [/Q] [/D] [/E:O ...
- go-swagger的简单使用
一.下载go-swagger go-swagger 官方下载 根据不同个的操作系统选择对应的 二.添加环境变量 2.1 window swagger_windows_amd64.exe 将swagge ...
- layui框架 各种小结
首先项目前端采用的是bootstrap和layui弹窗,验证,表格用的是bootstrapTable layui官方地址:http://www.layui.com/ 文档:http://www.lay ...
- Scala学习2 ———— 三种方式完成HelloWorld程序
三种方式完成HelloWorld程序 分别采用在REPL,命令行(scala脚本)和Eclipse下运行hello world. 一.Scala REPL. 按照第一篇在windows下安装好scal ...
- 开启远程MySQL
安装完MySQL,由于安全原因默认是没有赋予用户远程权限的,所以第一步要首先赋予用户对应的权限 一 授权 mysql> mysql -u用户名 [-pIp地址] -p #登录 mysql> ...
- Ubuntu1804安装Postgresql【转】
转载自:https://huur.cn/course/yw/1591.html 关系数据库管理系统是许多网站和应用程序的关键组成部分.它们提供了一种结构化的方式来存储,组织和访问信息. Postgre ...
- [转]Java web 开发 获取用户ip
如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,那么真正的用户端的真实IP则是取X-Forwarded-For中第一个非unknown的有效IP字符串. pu ...
- Clustered Index Scan 与 Clustered Index Seek
Clustered Index Scan 与 Clustered Index Seek 在利用 SQL Server 查询分析器的执行计划中,会有许多扫描方式,其中就有 Clustered Index ...
- 关于c# winform使用FidderCore.dll 遇到的一些问题,请求支援
小弟最近再研究winform用fidder抓取包的过程.开始都很顺利,并且成功开启了代理网络.同时手机也设置代理,并且手机可以上网,而且电脑也能抓到手机的请求. 但是遇到两个问题. 1.,这里的关闭代 ...