即可在选中单元格右侧打开批注编辑框,根据实际需要输入相应的批注内容,如图所示。
单击批注编辑框外侧的任何区域,添加的批注将被隐藏起来,只在批注所在的单元格右上角显示一个红色的三角形标志,如图所示。
4要查看批注,只需将光标移动到添加批注的单元格上,即可显示其中的批注内容,如图所示。
这篇文章主要介绍了asp.net读取excel中的数据并绑定在gridview上的方法,需要的朋友可以参考下
前台label,DropDownList,gridview控件
aspx.cs核心代码:
代码如下:
using System.Data.OleDb;//需要引入命名
public void Excel_Click(object sender, EventArgs e)
{
if (this.AttachmentFile.Value == "" && this.Label1.Text == "" && DropDownList2.SelectedValue == "")
{
Response.Write("scriptwindow.alert('请选择要导入的文件')/script");
}
if (this.AttachmentFile.Value != "" && this.DropDownList2.SelectedValue == "")
{
HttpFileCollection files = HttpContext.Current.Request.Files;
HttpPostedFile postedFile = files[0];
fileName = System.IO.Path.GetFileName(postedFile.FileName);
if (fileName != "")
{
postedFile.SaveAs("localhost文件夹" + fileName);
}
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "localhost文件夹" + fileName + ";Extended Properties=Excel 8.0;";//this.AttachmentFile.Value.ToString()
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable sheetNames = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
foreach (DataRow dr in sheetNames.Rows)
{
DropDownList2.Items.Add(dr[2].ToString());
}
this.Label1.Text = "localhost文件夹" + fileName;//this.AttachmentFile.Value.ToString();
conn.Close();
}
if (this.Label1.Text.ToString() != "" && this.DropDownList2.SelectedValue != "")// && this.DropDownList1.SelectedValue.ToString() != "全部"
{
//绑定到gridview
GridView1.DataSource = createDataSource(DropDownList2.SelectedValue.ToString(), this.Label1.Text.ToString());//, this.DropDownList1.SelectedValue.ToString()
GridView1.DataBind();
}
}
//以Excel为数据源获取数据集
private DataSet createDataSource(string select, string lable)
{
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + lable + ";Extended Properties=Excel 8.0;";
string strsql = "select 登记号码,姓名,日期,签到时间,签退时间,部门 from [" + select + "] order by 部门,日期,姓名";//excel表格的字段
OleDbConnection conn = new OleDbConnection(strCon);
OleDbDataAdapter da = new OleDbDataAdapter(strsql, conn);
try
{
conn.Open();
DataSet ds = new DataSet();
da.Fill(ds);
conn.Close();
return ds;
}
catch (Exception e)
{
Response.Write("scriptwindow.alert('没有数据,或者" + e.Message + "')/script");
return null;
}
}
以上是插入07以前版本excel
如果07版本以后只需要做小小修改
代码如下:
string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + lable + ";Extended Properties=Excel 12.0;";
方法1:在A1单元格输入前面的日期,比如2004-10-10,在A2单元格输入后面的日期,如2005-6-7。接着单击A3单元格,输入公式=DATEDIF(A1,A2,"d")。然后按下回车键,那么立刻就会得到两者的天数差240。
提示:公式中的A1和A2分别代表前后两个日期,顺序是不可以颠倒的。此外,DATEDIF函数是Excel中一个隐藏函数,在函数向导中看不到它,但这并不影响我们的使用。
方法2:任意选择一个单元格,输入公式="2004-10-10"-"2005-6-7",然后按下回车键,我们可以立即计算出结果。
计算工作时间工龄
假如日期数据在D2单元格。
=DATEDIF(D2,TODAY(),"y")+1
注意:工龄两头算,所以加1。
如果精确到天
=DATEDIF(D2,TODAY(),"y")&"年"&DATEDIF(D2,TODAY(),"ym")&"月"&tulaoShi.com;DATEDIF(D2,TODAY(),"md")&"日"
二、计算2003-7-6 17:05到2006-7-7 13:50分之间相差了多少天、多少个小时多少分钟
假定原数据分别在A1和B1单元格,将计算结果分别放在C1、D1和E1单元格。
C1单元格公式如下:
=ROUND(B1-A1,0)
D1单元格公式如下:
=(B1-A1)*24
E1单元格公式如下:
=(B1-A1)*24*60
注意:A1和B1单元格格式要设为日期,C1、D1和E1单元格格式要设为常规.
三、计算生日,假设b2为生日
=datedif(B2,today(),"y")
DATEDIF函数,除Excel 2000中在帮助文档有描述外,其他版本的Excel在帮助文档中都没有说明,并且在所有版本的函数向导中也都找不到此函数。但该函数在电子表格中确实存在,并且用来计算两个日期之间的天数、月数或年数很方便。微软称,提供此函数是为了与Lotus 1-2-3兼容。
该函数的用法为DATEDIF(Start_date,End_date,Unit),其中Start_date为一个日期,它代表时间段内的第一个日期或起始日期。End_date为一个日期,它代表时间段内的最后一个日期或结束日期。Unit为所需信息的返回类型。
Y为时间段中的整年数,M为时间段中的整月数,D时间段中的天数。MD为Start_date与End_date日期中天数的差,可忽略日期中的月和年。YM为Start_date与End_date日期中月数的差,可忽略日期中的日和年。YD为Start_date与End_date日期中天数的差,可忽略日期中的年。比如,B2单元格中存放的是出生日期(输入年月日时,用斜线或短横线隔开),在C2单元格中输入=datedif(B2,today(),"y")(C2单元格的格式为常规),按回车键后,C2单元格中的数值就是计算后的年龄。此函数在计算时,只有在两日期相差满12个月,才算为一年,假如生日是2004年2月27日,今天是2005年2月28日,用此函数计算的年龄则为0岁,这样算出的年龄其实是最公平的。
我们分两种情况讨论一下:
1.一直都是打不开,操作步骤如下:
工具,选项,常规标签,将忽略其它应用程序这个复选项前的勾去除即可.
[这种情况很多时候是由于版本或其他原因引起的]
2.如果有时候能打开,有时候打不开,且按照第一种情况操作后,故障依旧,那么很可能是因为进程中已经存在Excel的句柄,也就是说,Excel已经启动了,但是子窗体不能被创建.
那么你只要关闭Excel进程,重新打开就可以了,步骤如下。
Ctrl+Alt+Del--任务管理器--进程--选中Excel.exe--结束进程
然后重新打开就可以了。
另外还可以试试下面的办法:
如果你用的是2k/xp
尝试删除 documents and settings用户名application datamicrosoftexcel 文件夹
注意:application data 是一个隐藏目录,需要你在工具-文件夹选项-查看-勾选显示所有文件和文件夹-确定,才能看见.
单位教务部门拿来Excel两张工作表,要把成绩表中成绩列数据复制到学生基本信息表成绩列中。我对照了两个表,发现几个难点(如图)。
(1) 学生基本信息表的姓名与成绩表中的姓名不一样,学生基本信息表中的王一在成绩表中为 王 一,出现了全角或半角空格。
(2) 学生基本信息表中王小平在成绩表中无此人,即学生基本信息表的人数多于成绩表的人数。
(3) 成绩表中成绩列为文本方式,且出现了全角数字。
(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/ejc/)(4) 每个表的数据为几千条。如果对成绩表中的姓名列进行排序,把成绩列进行复制粘贴到学生基本信息表中的成绩列,出现错位。
我通过Excel函数SUBSTITUTE和LOOKUP来解决,将学生基本信息表和成绩表进行了一些修改,实现将成绩表中的数据复制到学生基本信息表中,并且保持最终表格的清爽和数据的正确。
除去成绩表中全角或半角空格
首先,我要解决的问题是将成绩表中姓名的空格去掉,让成绩表中的学生姓名显示和学生基本信息表中的一样。此时我利用替换公式SUBSTITUTE(SUBSTITUTE(A2,"半角空格 ",""),"全角空格","")。在D2单元格输入公式=SUBSTITUTE(SUBSTITUTE(A2," ","")," ",""),然后在整个D列复制公式。选择D列数据→进行复制,再选择A列所有数据→选择性粘贴→值和数字格式。
转化成绩表中成绩列为数字
删除了空格,下面的工作就是将成绩表中的数字规范为半角形式。同样利用函数SUBSTITUTE。在E2单元格输入公式=(SUBSTITUTE(C2,"。","."))*1,其中SUBSTITUTE(C2,"。",".")表示句号。转化为点号.,*1表示转化为数字。然后在E列复制公式。同样进行选择性粘贴。选择E列数据→进行复制,再选择C列所有数据→选择性粘贴→值和数字格式。删除成绩表中D列、E列。
复制成绩表中数据到学生基本信息表
最后一步就是复制成绩表中的数据到学生基本信息表了,但是我们不能简单地利用复制粘贴来实现,因为我们的这个具体案例中包含没有成绩的同学,所以为了数据的正确性,我们知道查询函数LOOKUP有一个特性就是在查询结束后会在指定的区域返回查询结果,我就用它来达到复制成绩表中数据的效果。
其语法为LOOKUP(lookup_value,lookup_vector,result_vector)。其中Lookup_value为要查找的数值,Lookup_vector为只包含一行或一列的区域,且必须按升序排列,否则要返回错误,Result_vector 返回只包含一行或一列的区域。
如果函数LOOKUP找不到lookup_value,则查找lookup_vector中小于或等于lookup_value的最大数值,如果lookup_value 小于lookup_vector 中的最小值,函数LOOKUP 返回错误值 #N/A,利用这个特性,我们把公式改为=LOOKUP(1,0/(条件),引用区域),条件产生的是逻辑值True、False数组,0/True=0,0/false=#DIV0!,即Lookup的第2参数便是由0、#DIV0!组成的数组(都比1小),如果找到满足条件,就返回对应行引用区域的值;如果没有找到满足条件的记录则返回#N/A错误,从而实行精确查找。
在学生基本信息表中D2输入公式=LOOKUP(1,0/(成绩表!A$2:A$5=B2),成绩表!C$2:C$5)。在没找到数据的一栏出现了#N/A,影响了表格的美观。稍微改进一下,利用ISNA函数判断是否为#N/A,如果是,设置为空。
因此在D2输入公式=IF(ISNA(LOOKUP(1,0/(成绩表!A$2:A$5=B2),成绩表!C$2:C$5)),"",LOOKUP(1,0/(成绩表!A$2:A$5=B2),成绩表!C$2:C$5)),这样#N/A不会出现在单元格中。最后在D列进行公式复制即可。
周一,打字员小吴向我提出了一个问题:我用Excel制作的表格,如果只想打印其中的某个区域,该如何操作?我向她推荐了下面下面几种方法,你如何感兴趣,也不妨一试。
一、区域设置法
如果每次都是打印某一个固定的区域,用这种方法是最合适的。
启动Excel2003(其它版本请仿照操作),打开相应的工作簿文件,选中需要打印的区域,执行文件→打印区域→设置打印区域命令。以后,需要打印该区域时,只要按一下常用工具栏上的打印按钮就行了。
[友情提醒]此时,如果需要打印整个工作表的内容,请先取消设置的打印区域:执行文件→打印区域→取消打印区域命令。
二、打印区域法
如果要想打印多个不同的区域,请采取此种方法。
选中需要打印的区域,执行文件→打印命令,打开打印内容对话框,选中打印内容下面的选定区域选项,然后确定打印就行了。
[友情提醒]①无论是否设置了打印区域,此方法都是有效的。②如果同时选中了多个不连续的数据区域,进行上述操作时,系统只将每个连续的区域打印在一页上。③在打印内容对话框中(参见图1),选中打印范围下面的页选项,然后在后面的方框中输入起始页码,即可将指定的页打印出来。(在WORD中,仿照此操作,也可以将指定的页打印出来。)
三、视面管理法
如果经常要打印多个不同的区域,采取方法二操作,既麻烦又容易出错,建议大家采用本办法。
执行视图→视面管理器命令,打开视面管理器对话框,单击其中的添加按钮,打开添加视图对话框,输入一个全称(如全部),确定退出。
选中不需要打印的列(行),右击鼠标,在随后弹出的快捷菜单中选隐藏选项,将不需要打印的列(行)隐藏起来,然后再打开视面管理器对话框,添加一个视面视图(如打印报表等),确定退出。
TuLaoShi.com提醒大家在按住Ctrl键的同时,用鼠标分别单击相应的列(行),可以一次性同时选定多个不连续的列(行),一次性实现上述隐藏操作。
再次打开视面管理器对话框,选中全部视图项,单击显示按钮,将整个工作表都显示出来。然后仿照上面的操作,将另外一些不需要打印的列(行)隐藏起来,再添加另一个视面视图(如标牌等),确定退出。
以后需要打印某个区域时,先打开视面管理器对话框,选中相应的视图(如打印报表)项,单击显示按钮,将相应的视图显示出来,然后执行打印操作就行了。
四、宏命令法
启动Excel,打开相应的工作簿(,按下Alt+F11组合键,进入Visual Basic编辑器状态,在左侧工程资源管理器窗口中,选中上述工作簿对话的工程(如VBAProject(2004备案.xls)),执行插入→模块命令插入一个新模块(模块1),然后将下述代Tulaoshi.com码输入到右侧的窗口中:
Sub 打印()
Selection.PrintOut
End Sub
输入完成后,关闭Visual Basic编辑器窗口返回。
选中需要打印的区域,执行工具→宏→宏命令,打开宏对话框,选中刚才编辑的宏(打印),单击执行按钮即可。
友情提醒大家,如果在工程资源管理器窗口中选中VBAProject(PERSONAL.xls)选项,则上述宏对所有的工作簿文件有效。
对于一个包含许多数据列的Excel工作表而言,用户往往希望只显示对自己有用的部分数据列,同时隐去不需要的数据列。同时不同用户对所要求显示的数据列往往又是不相同的。
例如,对于一张包含多个科目的学生成绩表,语文老师可能只想看语文成绩,数学老师可能只想看数学成绩。但是,由于多个科目的成绩都汇总在一起,这就会给老师查看单科成绩造成不便。如果能针对不同用户的需求,快速地隐去用户不需要的数据列,只留下用户需要的数据列,这样,用户就能很轻松地将注意力集中在所需的数据上。很多用户可能说,这太简单了!
把不需要的数据列隐藏起来就行了。没错,但问题是,如何隐藏?如果每个用户每次查看都通过手动隐藏和取消隐藏数据列来操作,那就太麻烦了。不过,借助Excel的视图和宏就能轻松解决这个问题。下面笔者就以一张包含多个科目的学生成绩表为例介绍具体的实现方法。
第一步:创建用户视图
首先,在Excel中打开学生成绩工作表(如图1)。我们先来设置语文视图,这个视图中只显示语文成绩。选中除学号、姓名和语文数据列以外的所有数据列,用右键单击选中数据列标题,在弹出的菜单中选择隐藏命令。
这样,工作表中就只剩下了语文成绩了。接着,依次单击视图-视图管理器命令,进入视图管理器对话框。单击添加按钮,在 名称框中输入ChineseView(如图2),单击确定按钮返回,语文视图就创建好了。重复上述步骤,创建其他所需视图。
第二步:录制视图切换宏
视图创建好后,虽然可以通过视图管理器进行切换,但是,每次这样操作就显得太繁琐。因此,可将切换视图操作录制成宏以减少切换操作步骤。我们先来录制查看语文视图的宏。依次单击工具-宏-录制新宏,在宏名中输入查看语文,单击确定按钮开始录制宏(如图3)。
接着,单击视图→视图管理器,进入视图管理器。在视图列表中选中ChineseView并单击显示按钮。最后,单击停止录制按钮完成宏的录制。这样,查看语文视图的宏就录制好了。重复上述步骤,依次录制其他所需的宏。
第三步:创建视图切换按钮
宏录制好了,我们还要为这些宏创建一个工具栏及相应的命令按钮。否则,每次都要使用宏对话框来运行宏还是不方便。用右键单击工具栏任意处,在弹出的菜单中选择自定义命令。在打开的自定义对话框中,切换到工具栏标签页,单击新建按钮。在工具栏名称框中输入切换视图,单击确定按钮。
此时,在自定义对话框边上会出现一个切换视图工具栏。这就是我们刚才新创建的工具栏。接着,在自定义对话框中,切换到命令标签页,在类别列表中选择宏,将右侧命令列表中的自定义按钮拖放到切换视图工具栏中。用右键单击刚拖放过来的自定义命令按钮,在命名框中输入查看语文对其进行重命名,并选择总是只用文字(如图4)。
再次用右键单击自定义命令按钮,选择指定宏命令,在弹出的对话框中,选择查看语文宏,单击确定返回自定义对话框。重复上述步骤,为其他宏也创建相应的命令按钮。最后完成的切换视图工具栏如图5所示。
至此,整个工作就算做完了。以后,要查看某个科目的成绩时,只要单击切换视图工具栏上相应的命令按钮,就能快速切换到只显示某个科目成绩的视图。使用该技巧,我们还可以帮助财务、工程技术等人员在一大堆数据中快速找到自己需要的数据。