foxtable有自动标注已修改过单元格并用红色白字显示的功能。但是一保存数据色彩消失,同时导出为Excel时也无法保存显示色彩。
但有些时候,比如一家公司的办事机构,每天都需要更新报表,按常规的做法,用Excel记录,每天发报表,有更新内容的单元格用色彩标注出来。
现在用foxtable,我们可以做到让有更新的单元格自动显示更新,而且可以显示当天的更新内容,无论是否保存数据或是多次打开项目,都可以实时显示当天的更新内容的单元格。且可以实时跟综每一个单元格什么时候由谁进行了更新,更新前的内容以及更新后的内容等。虽然暂时不是很好用,但是基本上也是可以解决一些问题。目前还在抽空学习,希望大家也多帮忙指教。
现在自己瞎弄了一下,基本上可以满足要求。思路是这样子的,在原有报表上新增加两列,一列用于记录历史操作的记录(什么时候由谁更新了什么内容,更新前后的内容等),另一列用于记录该单元格是什么时候更新的,就是它的最近的更新时间。
附上附件,请各位指教,我不太会编程,业余学习的,不好的地方还请各位多指点。
现在还有一些问题存在问题:
1、显示单元格只能显示最新的更新日期并标色,不能做到想找哪一天的更新内容就显示那一天的更新内容,就算在这一天之后该单元格有再次更新过;
2、假如,有一个单元格里面有一值“已验收”,我该成了“已回款”,这时单元格标注了底色,但是当我发现改错了的时候,又改回了“已验收”虽然已经改回了原来的值,但是还是显示标注的底色,而无法做到改如果改回原值就不会显示标注;
请问各位有无更好的方法,包括代码的优化等。
在窗口右侧文本框中输入想查看的日期并回车确定。就可以查看内容的最近修改日期。(其中暂时有2011-11-17,2011-11-18,2011-11-19,2011-11-20可供选择,每一日期都有底色标注。)
请注意,因为新建一个项目的关系,个别代码中的备注信息没有按新命名的列进行更新,看本贴的代码更准。
以下为表结构:
表A
工程编号() ----> 字符型(50)
工程名称() ----> 字符型(50)
工程监理单位() ----> 字符型(50)
工程进度() ----> 字符型(50)
操作历史记录() ----> 字符型(536870910)
内容修改时间() ----> 字符型(536870910)
请注意:该实例是提前自定义了样式,名为“标注底色”,以下是输出代码:
项目事件
AfterOpenProject
Forms("窗口1").Open
---------------------------------------------------------------------------------------------------------------------------------------------------
表事件
表A_DataColChanging
If e.DataCol.Name <> "内容修改时间" Then '如果选中的列不是"备注"
'********************************************************************************************************
If e.DataRow.isnull("内容修改时间") Or e.DataRow("内容修改时间") = "" Then '如果"内容修改时间"列内容为空
For Each col As DataCol In e.DataTable.DataCols '历遍表中的每一列
If col.Name <> "内容修改时间" '排除掉表中的"内容修改时间"列
e.DataTable .DataCols("内容修改时间").AllowEdit = True '解锁"内容修改时间"列
e.DataRow("内容修改时间") = e.DataRow("内容修改时间") & "[" & col.Name & "]" & "修改时间:" & "0001-01-01" '按特定的格式填入内容
e.DataTable .DataCols("内容修改时间").AllowEdit = False '锁"内容修改时间"列
End If
Next
End If
'**************************************************************************************************
If e.DataRow("内容修改时间") <> "" Then '如果"内容修改时间"列不为空
Dim 备注内容 As String = e.DataRow("内容修改时间") '定义字符串"备注内容"取内容修改时间列中的内容
'---------------------------------------------------------------------------------
If e.OldValue <> e.NewValue Then '如果旧值与新值不相等,说明有修改
Dim str1 As String = "[" & e.DataCol.Name & "]" & "修改时间:"
Dim 修改位置 As Integer = 备注内容.IndexOf(str1) + str1.Length 'str1的起始位置+str1的长度,即定位所修改的列记录日期的起始位置
Dim 原日期 As String = 备注内容.SubString(修改位置,10) '记录下"内容修改时间"列中目前修改列的原来记录日期
Dim 需修改内容 As String = str1 & 原日期 '如要替换的内容
'###################################################################################
If 备注内容.Contains(str1) Then '确认"内容修改时间"列是否包含str1的内容
Dim 修改后内容 As String = 备注内容.Replace(需修改内容,str1 & CStr(Date.Today)) '用今天的日期更新掉原来的记录日期
e.DataTable .DataCols("内容修改时间").AllowEdit = True '解锁"备注"列
e.DataRow("内容修改时间") = 修改后内容 '重新给"内容修改时间"列内容
e.DataTable .DataCols("内容修改时间").AllowEdit = False '锁"内容修改时间"列
End If
'###################################################################################
'---------------------------------------------------------------------------------
End If
End If
'********************************************************************************************************
End If
表A_DataColChanged
If e.DataCol.Name <> "操作历史记录" And e.NewValue <> e.OldValue Then '非选择"操作历史记录列",输入值与原来不一致
'以下语句为记录操作记录
If e.DataCol.Name <> "内容修改时间" Then
e.DataRow("操作历史记录") = e.DataRow("操作历史记录") & User.Name & "|" & CStr(Date.Now) & "|修改了站点:|" & e.DataRow("工程名称") & "|" & e.DataCol.Name & "|原来是:|" & cstr(e.OldValue) & "|修改后是:|" & CStr(e.NewValue) & vbcrlf
End If
End If
表A_DataRowAdded
If e.DataRow.isnull("内容修改时间") Or e.DataRow("内容修改时间") = "" Then '如果"内容修改时间"列内容为空
For Each col As DataCol In e.DataTable.DataCols '历遍表中的每一列
If col.Name <> "内容修改时间" '排除掉表中的"内容修改时间"列
e.DataTable .DataCols("内容修改时间").AllowEdit = True '解锁"备注"列
e.DataRow("内容修改时间") = e.DataRow("内容修改时间") & "[" & col.Name & "]" & "修改时间:" & "0001-01-01" '按特定的格式填入内容
e.DataTable .DataCols("内容修改时间").AllowEdit = False '锁"内容修改时间"列
End If
Next
End If
表A_DrawCell
Dim 备注内容 As String = e.Row("内容修改时间")
For R As Integer = 0 To e.Table.Rows.Count
For Each cl As Col In e.Table.Cols
If cl.Name <> "内容修改时间" Then
Dim 位置 As Integer = 备注内容.IndexOf(e.col.Name) + e.col.Name.Length + 6 '"]修改时间:"
Dim 记录日期 As String = 备注内容.SubString(位置,10)
If 记录日期 = Vars("内容修改记录日期") Then
e.Style = "标注底色"
End If
End If
Next
Next
------------------------------------------------------------------------------------------------------------------------------------------------------
窗口与控件事件
窗口1_AfterLoad
Vars("内容修改记录日期") = CStr(Date.Today)
窗口1_Button1_Click
With Forms("窗口1").Controls("TextBox1")
If .value = "" Then
.value = CStr(Date.Today)
Vars("内容修改记录日期") = .value
Else
Vars("内容修改记录日期") = .value
End If
End With
Dim tbname As String = Vars("内容修改记录日期") & CurrentTable.Name
Dim flg As New SaveExcelFlags
flg.RowNumber = True
flg.CellStyle = True
flg.MergedRanges = True
CurrentTable.SaveExcel("C:工程进度跟综表.xls",tbname,flg)
窗口1_Button2_Click
With Forms("窗口1").Controls("TextBox1")
.value = CStr(Date.Today)
Vars("内容修改记录日期") = .value
End With
CurrentTable.Refresh
窗口1_TextBox1_ValueChanged
With Forms("窗口1").Controls("TextBox1")
Vars("内容修改记录日期") = .value
End With
CurrentTable.Refresh
[此贴子已经被作者于2011-11-20 16:21:11编辑过]