Excel打印成绩单的方法

时间:2024-04-17 10:13:40

整理于:2011-4-28 15:12

1、调出“邮件合并”工具栏,单击工具栏上的“设置文档类型”按钮,选择文档类型为“目录”。

2、单击工具栏上的“打开数据源”按钮,选择数据源。

3、把插入点放到要插入数据的位置,单击工具栏上的“插入域”按钮,选择对应的域项目插入。依此完成数据的插入。

4、数据源导入后数值的转换会发生精度误差。此时可采用如下方法处理:
A.对域进行格式设置。合并的域后加个格式开关,如:加“\#"#,##0.00"”,表示保留两位小数,并且数值带千分位符号。代码也可以从新建的域里查找。
B.在EXCEL里处理好数值,改成文本。不推荐。

Excel打印成绩单的方法2:用 Excel 的 函数公式。

Excel文件的sheet1中存放成绩表的原始数据,假设有N列。第一行是成绩项目,从第二行开始是每个人的成绩。

在sheet2中我们来设置成绩单。根据实际情况,成绩单由三行构成,一行对应成绩项目,一行对应一个人的成绩数据,然后是一个空行用来方便切割。这样三行构成一个成绩单。成绩项目处在行号除以3余数为1的行上;空行处在行号能整除3的行上。以上两行不难设置,关键是成绩数据行,牵扯到sheet1与 sheet2中数据的对应,经分析不难看出“sheet1中的数据行=INT((sheet2中的数据行+4)/3)”。

这样我们在sheet2的A1单元格中输入公式“=IF(MOD(ROW(),3)=0,"",IF(MOD(ROW(),3)=1,Sheet1!A$1,INDEX(Sheet1!$A:$N,INT((ROW()+4)/3),COLUMN())))”。确认后选择A1单元格,把鼠标放在A1单元格的右下角,鼠标变成“+”时,向右拖动鼠标自动填充至N列,这样成绩单中的第一行就出来了。选定A1:N1,把鼠标放在N1单元格的右下角,鼠标再次变成“+”时,向下拖动鼠标自动填充到数据的最后一行,成绩单就全部制作完成了。

该公式运用IF函数,对MOD函数所取的引用行号与3的余数进行判断。如果余数为0,则产生一个空行;如果余数为1,则固定取sheet1中第一行的内容;否则运用INDEX函数和INT函数来取Sheet1对应行上的数。

最后来设置一下格式,选定A1:N2设上表格线,空行不设。然后选定A1:N3,拖动N3的填充柄向下自动填充,这样有数据的有表格线,没有数据的没有表格线。最后调整一下页边距,千万别把一个成绩单打在两页上。

Excel打印成绩单的方法3:用 Excel 的 排序功能。

假定班级有学生20人,成绩数据在A1:G22区域。在工作表的第一行A1:G1区域为成绩项目。我们需要的成绩单是第一行为成绩项目,第二行为各学生的成绩,第三行为空行,以便我们打印后分割。

如上作法,成绩项目均处在行号1,4,7,10,……;学生成绩均处在行号2,5,8,11,……;间隔行(空行)均处在行号3,6,9,12,……。这样我们在成绩表上添加一列,在第一条学生成绩所在的行填上2,接着以步长为3对该列进行序列填充,填充到最后一条学生成绩。

接着,在最后一条学生成绩后面复制19行成绩项目,这样加上原来的1行成绩项目,共20条成绩项目。20个学生20条成绩项目。依照上面的做法,在第一条成绩项目所在的行填上1,在第二条成绩项目所在的行填上4,接着以步长为3对添加的列进行序列填充,填充到最后一条成绩项目。

接着,在最后一条成绩项目后面依照上面的做法,接着以步长为3,从3开始给添加的列进行序列填充19个空行。

最后,以添加的列为依据对成绩表进行升序排列即可。

Excel打印成绩单的方法4:用 Excel 的 VBA 功能。
用 Excel 的 VBA 功能,需要掌握VB的编写。也可以套用现成的代码,也可以下载相关的VBA模块使用。下面提供打印成绩单的VBA代码:

1、进入VBE编辑器,插入一个模块,粘贴代码:

Public i As Integer

Public EndRow As Integer

Sub DelRows() \'删除工资条

\'声明变量

Dim myString As String

\'声明常量起始行 StarRow 为3

Const StarRow = 3

\'赋值最后的行号给 EndRow,A1单元格的值给 myString

EndRow = Range("A65536").End(xlUp).Row

myString = Range("A1").Value

With Application.ScreenUpdating = False \'关闭屏幕刷新

.StatusBar = "正在删除工资条,请稍候……" \'状态栏显示文字

End With

\'在最后行和起始行间循环

For i = EndRow To StarRow Step -1

\'如果第一列的单元格为空或值为 myString 就删除该行

If IsEmpty(Cells(i, 1)) Or Cells(i, 1) = myString Then Rows(i).Delete

Next

\'恢复有效的已使用单元格区域

Dim myAddress As String

myAddress = ActiveSheet.UsedRange.Address

\'设置顶端标题行

ActiveWorkbook.Names.Add Name:="Print_Titles", RefersToR1C1:="=R1"

With Application

.StatusBar = False \'恢复状态栏

.ScreenUpdating = True \'恢复屏幕刷新

End With

End Sub

Sub InsertRows() \'生成工资条

i = 3 \'初始化变量

EndRow = Range("A65536").End(xlUp).Row

With Application

.ScreenUpdating = False \'关闭屏幕刷新

.StatusBar = "正在生成工资条,请稍候……" \'状态栏显示文字

End With

\'当i<= EndRow 时执行

Do While i <= EndRow

Rows(1).Copy \'复制第1行

Rows(i).Insert shift:=xlDown \'插入到第 i 行

Rows(i).Insert \'插入一个空行

With Rows(i)

.RowHeight = 20 \'设置空行的行高为20

.Borders.LineStyle = xlNone \'取消边框

End With

i = i + 3

EndRow = EndRow + 2

Loop

ActiveWorkbook.Names("Print_Titles").Delete \'取消顶端标题行设置

With Application

.StatusBar = False \'恢复状态栏

.ScreenUpdating = True \'恢复屏幕刷新

End With

End Sub

2、在工作表中插入两个命令按钮控件(CommandButton1、CommandButton2),右击控件--属性,分别把 Caption 改为 "生成工资条" 和 "删除工资条"。

3、为两个 CommandButton 添加代码:

Private Sub CommandButton1_Click()

Call InsertRows

CommandButton1.Enabled = False

CommandButton2.Enabled = True

End Sub

Private Sub CommandButton2_Click()

Call DelRows

CommandButton1.Enabled = True

CommandButton2.Enabled = False

End Sub