自关联对象在实际开发中用的还是比较多,例如常见的树形菜单。本文是自己实际的一个小测试,可以解决循环引用对象的json序列化问题,文笔不好请多见谅,如有错误请指出,希望有更好的解决方案,一起进步。
- 构造一个自关联实体
- 构造序列化数据
- 无任何处理序列化输出
可以看下面的表格数据是嵌套的
无任何处理直接序列化
- 解决
重写JsonResult, ReferenceLoopHandling.Ignore忽略其循环引用
调用
最终调用结果
在工作中,我们有时需要输入日期和时间,例如要填写开学时间、上下课时间、教师报到日期等等,这时如果数据很多的话一遍一遍的录入就很耽误时间了,这时要想为了减少录入的工作量,我们就可以把日期和时间设置为自动生成。今天我们就来教教大家如何在Excel里设置自动生成数据的日期和时间的方法。
首先我们先来认识一下什么是excel迭代计算?
百度百科对迭代计算的解释是:
迭代法是数值计算中一类典型方法,应用于方程求根,方程组求解,矩阵求特征值等方面。其基本思想是逐次逼近,先取一个粗糙的近似值,然后用同一个递推公式,反复校正此初值,直至达到预定精度要求为止。
迭代计算次数指允许公式反复计算的次数,在Excel中通常只针对循环引用生效.其他公式在循环引用状态下不产生变化。
例如,我们想在表格里输入一串数字,后面就可以自动显示对应日期:
我们就可以在单元格B列输入公式:「=IF(A2="","",IF(B2="",NOW(),B2))」,然后拖动B列数据向下填充就可以自动得到上述图片里的时间;
如果我们想一直保持这样的操作,就可以在设置项里对该公式函数进行「启用迭代计算」操作,具体操作方法是:进入「文件」-「选项」-「公式」,勾选右侧的「启用迭代计算」,然后确定。选中B列单元格,然后「右键」-「设置单元格格式」-「自定义」,在类型中输入 「yyyy/mm/dd hh:mm:ss」确定。全部设置完成以后,我们再在A列单元格中输入内容,B列对应单元格就会显示相应的录入日期和时间。
需要注意的是,如果老师们需要成绩查询系统,在做excel表格的时候不能包含函数公式,如果表格里含有函数公式,在上传易查分平台的时候可能会有报错提示,所以,为了节省老师们的工作时间,建议在做表格的时候,把表格里的函数公式去掉并仅保留转换过后的数据再导入,这样一次就可以成功上传到易查分,3分钟左右就能生成一个功能强大的成绩查询系统!
这个方法,老师们都去试试吧!马上就要开学了,老师们也可以用易查分来做一个新生录取查询系统哦!超级方便!
以上操作步骤,如果有不懂的地方,老师们可以在留言区留下你的问题,我会在第一时间为你解答哦!
主要是懒得再写一次了,所以就在关键点添加了注释,只能凑合着看了
有个地方困惑我了一天,所以发到博客做个记录,避免以后忘了
引用的dll我就不说了,大家应该都知道引用那些!!!
还有一点就是中间有数据库的操作,和循环创建行,这个应该没有什么难度,应该都能看懂!!!
private void AddWord() { try { TreeNode node = this.tree_main.SelectedNode;//获取选择节点的值 string str = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //获取桌面路径 没有用上 string root = ""; //获取条件表名称 root = node.Name; string sql = "SELECT TableName,FieldName,FieldTitle,DataType,DataLen FROM dbo.Table_Stru WHERE TableName='" + root + "'"; this.ds = DM.ReturnTableEx(sql); //执行sql 获取记录 存放在dataSet里面 //需要循环创建word行 string strtitle = "方法生成:"; object oMissing = System.Reflection.Missing.Value; object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ //创建文档 WordAPP._Application oWord = new Microsoft.Office.Interop.Word.Application(); object unit = Microsoft.Office.Interop.Word.WdUnits.wdLine; //光标移到未尾 WordAPP._Document oDoc; oWord.Visible = false; oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing); //设置页眉 oWord.ActiveWindow.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdOutlineView; oWord.ActiveWindow.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekPrimaryHeader; oWord.ActiveWindow.ActivePane.Selection.InsertAfter("文档"); oWord.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;//设置右对齐 oWord.ActiveWindow.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekMainDocument; //跳出页眉设置 //库名 WordAPP.Paragraph oPara1; oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing); oPara1.Range.Text = strtitle; oPara1.Range.Font.Bold = 1; oPara1.Range.Font.Name = "宋体"; oPara1.Range.Font.Size = 12; oPara1.Range.ParagraphFormat.Alignment = WordAPP.WdParagraphAlignment.wdAlignParagraphCenter; oPara1.Format.SpaceAfter = 5; //24 pt spacing after paragraph. oPara1.Range.InsertParagraphAfter(); string funcName = "AddInfoData"; if (ds != null || ds.Tables[0].Rows.Count > 0) //判断读取的是否为空 { //表名 WordAPP.Paragraph oPara2; object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oPara2 = oDoc.Content.Paragraphs.Add(ref oRng); int staIndex = node.Text.IndexOf("-"); oPara2.Range.Text = "添加、修改" + node.Text.Substring(staIndex, node.Text.Length - staIndex) + "(AddInfoData)";//标题 oPara2.Range.Font.Bold = 1; oPara2.Range.Font.Name = "宋体"; oPara2.Range.Font.Size = 10; oPara2.Range.ParagraphFormat.Alignment = WordAPP.WdParagraphAlignment.wdAlignParagraphLeft; oPara2.Format.SpaceBefore = 15; oPara2.Format.SpaceAfter = 1; oPara2.Range.InsertParagraphAfter(); //描述信息 WordAPP.Paragraph oPara3; oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oPara3 = oDoc.Content.Paragraphs.Add(ref oRng); oPara3.Range.Text = ""; oPara3.Range.Font.Bold = 0; oPara3.Range.Font.Name = "宋体"; oPara3.Range.Font.Size = 9; oPara3.Range.ParagraphFormat.Alignment = WordAPP.WdParagraphAlignment.wdAlignParagraphCenter; oPara3.Format.SpaceBefore = 1; oPara3.Format.SpaceAfter = 1; oPara3.Range.InsertParagraphAfter(); //插入表格 WordAPP.Table oTable; WordAPP.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oTable = oDoc.Tables.Add(wrdRng, 5, 2, ref oMissing, ref oMissing);//指定行数和列数 oTable.Range.Font.Name = "宋体"; oTable.Range.Font.Size = 9; oTable.Borders.Enable = 1; oTable.Rows.Height = 10; oTable.AllowAutoFit = true; oTable.Columns[1].Width = 80; //oTable.Columns[2].Width=80; oTable.Columns[2].Width = 400; //填充表格内容 oTable.Cell(1, 1).Range.Text = "CmdKind"; //在表格的第一行第一列填入内容。 oTable.Cell(1, 2).Range.Text = funcName; //在表格的第一行第二列填入内容。 oTable.Cell(2, 1).Range.Text = "函数功能"; oTable.Cell(2, 2).Range.Text = "添加或更改Info类型单据数据。"; oTable.Cell(3, 1).Range.Text = "inParam参数说明"; oTable.Cell(3, 2).Range.Text = "1.参数表\"Param\""; oTable.Cell(3, 2).Range.Font.Bold = 1; string para = ""; oTable.Cell(3, 2).Range.Select(); //获取焦点 unit = Microsoft.Office.Interop.Word.WdUnits.wdLine;//移到未尾 oDoc.ActiveWindow.Selection.EndKey(ref unit, ref oMissing); WordAPP.Table paraTable; //声明一个表格 WordAPP.Range rangePara = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; paraTable = oDoc.Tables.Add(oDoc.ActiveWindow.Selection.Range, 7, 6, ref oMissing, ref oMissing); //创建表格在光标的位置 paraTable.Range.Font.Name = "宋体"; paraTable.Range.Font.Size = 9; paraTable.Borders.Enable = 1; paraTable.Rows.Height = 10; paraTable.AllowAutoFit = true; //设置表格的宽度 paraTable.Columns[2].Width = 100; paraTable.Columns[3].Width = 100; paraTable.Columns[5].Width = 40; paraTable.Columns[6].Width = 40; paraTable.Cell(1, 1).Range.Text = "字段名称"; paraTable.Cell(1, 2).Range.Text = "字段说明"; paraTable.Cell(1, 3).Range.Text = "附加说明"; paraTable.Cell(1, 4).Range.Text = "字段类型"; paraTable.Cell(1, 5).Range.Text = "主键"; paraTable.Cell(1, 6).Range.Text = "非空"; paraTable.Cell(2, 1).Range.Text = "Module"; paraTable.Cell(2, 2).Range.Text = "数据库标识"; paraTable.Cell(2, 3).Range.Text = ""; paraTable.Cell(2, 4).Range.Text = "varchar(50)"; paraTable.Cell(2, 5).Range.Text = "0"; paraTable.Cell(2, 6).Range.Text = "1"; paraTable.Cell(3, 1).Range.Text = "TableName"; paraTable.Cell(3, 2).Range.Text = "数据表名称"; paraTable.Cell(3, 3).Range.Text = ds.Tables[0].Rows[0]["TableName"].ToString(); paraTable.Cell(3, 4).Range.Text = "varchar(50)"; paraTable.Cell(3, 5).Range.Text = "0"; paraTable.Cell(3, 6).Range.Text = "1"; //设置指定表格的背景颜色 paraTable.Cell(3, 3).Range.Shading.BackgroundPatternColor = Microsoft.Office.Interop.Word.WdColor.wdColorLightYellow; paraTable.Cell(4, 1).Range.Text = "PID"; paraTable.Cell(4, 2).Range.Text = "树形节点编号值"; paraTable.Cell(4, 3).Range.Text = "Info类表传递树节点的编号,无树形结构的传递空字符串。"; paraTable.Cell(4, 4).Range.Text = "varchar(50)"; paraTable.Cell(4, 5).Range.Text = "0"; paraTable.Cell(4, 6).Range.Text = "0"; paraTable.Cell(5, 1).Range.Text = "UID"; paraTable.Cell(5, 2).Range.Text = "当前用户编号"; paraTable.Cell(5, 3).Range.Text = ""; paraTable.Cell(5, 4).Range.Text = ""; paraTable.Cell(5, 5).Range.Text = "0"; paraTable.Cell(5, 6).Range.Text = "1"; paraTable.Cell(6, 1).Range.Text = "TreeSetID"; paraTable.Cell(6, 2).Range.Text = "树结构配置编号"; paraTable.Cell(6, 3).Range.Text = ""; paraTable.Cell(6, 4).Range.Text = "varchar(50)"; paraTable.Cell(6, 5).Range.Text = "0"; paraTable.Cell(6, 6).Range.Text = "1"; oTable.Cell(3, 2).Range.Select(); //获取指定表格的焦点 unit = Microsoft.Office.Interop.Word.WdUnits.wdLine;//移到未尾 oDoc.ActiveWindow.Selection.EndKey(ref unit, ref oMissing); oDoc.ActiveWindow.Selection.InsertAfter("2.参数表\"Param2\"");//在指定的光标位置添加标题 oWord.ActiveWindow.Selection.Font.Bold = 1; oTable.Cell(3, 2).Range.Select(); //获取焦点 unit = Microsoft.Office.Interop.Word.WdUnits.wdLine;//移到未尾 oDoc.ActiveWindow.Selection.EndKey(ref unit, ref oMissing); //在一个表格里面嵌套了两个表格 WordAPP.Table paraTable2; WordAPP.Range rangePara1 = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; paraTable2 = oDoc.Tables.Add(oDoc.ActiveWindow.Selection.Range, 3, 6, ref oMissing, ref oMissing); //创建表格在光标的位置 paraTable2.Range.Font.Name = "宋体"; paraTable2.Range.Font.Size = 9; paraTable2.Borders.Enable = 1; paraTable2.Rows.Height = 10; paraTable2.AllowAutoFit = true; paraTable2.Columns[2].Width = 100; paraTable2.Columns[3].Width = 100; paraTable2.Columns[5].Width = 40; paraTable2.Columns[6].Width = 40; paraTable2.Cell(1, 1).Range.Text = "字段名称"; paraTable2.Cell(1, 2).Range.Text = "字段说明"; paraTable2.Cell(1, 3).Range.Text = "附加说明"; paraTable2.Cell(1, 4).Range.Text = "字段类型"; paraTable2.Cell(1, 5).Range.Text = "主键"; paraTable2.Cell(1, 6).Range.Text = "非空"; paraTable2.Cell(2, 1).Range.Text = "_op"; paraTable2.Cell(2, 2).Range.Text = "操作类型"; paraTable2.Cell(2, 3).Range.Text = "0:添加 1:更改"; paraTable2.Cell(2, 4).Range.Text = "INT"; paraTable2.Cell(2, 5).Range.Text = "0"; paraTable2.Cell(2, 6).Range.Text = "1"; paraTable2.Cell(3, 1).Range.Text = "ROOT"; paraTable2.Cell(3, 2).Range.Text = "父节点编号"; paraTable2.Cell(3, 3).Range.Text = ""; paraTable2.Cell(3, 4).Range.Text = "char(32)"; paraTable2.Cell(3, 5).Range.Text = "0"; paraTable2.Cell(3, 6).Range.Text = "0"; //循环添加表格 int a = 4; for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { //SELECT TableName,FieldName,FieldTitle,DataType,DataLen FROM dbo.Table_Stru paraTable2.Cell(a, 1).Range.Text = ds.Tables[0].Rows[i]["FieldName"].ToString(); paraTable2.Cell(a, 2).Range.Text = ds.Tables[0].Rows[i]["FieldTitle"].ToString(); paraTable2.Cell(a, 3).Range.Text = ""; paraTable2.Cell(a, 4).Range.Text = ds.Tables[0].Rows[i]["DataType"].ToString() == "Integer" ? "INT" : "VARCHAR(" + ds.Tables[0].Rows[i]["DataLen"].ToString() + ")"; paraTable2.Cell(a, 5).Range.Text = "0"; paraTable2.Cell(a, 6).Range.Text = "0"; //注意嵌套表时只能一行一行的插入 paraTable2.Rows.Add(ref oMissing);//添加一行 a++; } oTable.Cell(4, 1).Range.Text = "rtnData参数数据"; oTable.Cell(4, 2).Range.Text = "null"; paraTable.Rows.First.Shading.Texture = WordAPP.WdTextureIndex.wdTexture25Percent;//设置阴影 paraTable.Rows.First.Range.Font.Bold = 1; oTable.Cell(5, 1).Range.Text = "备注"; oTable.Cell(5, 2).Range.Text = ""; oWord.Visible = true; //打开生成的word oDoc.Activate(); } } catch (Exception ) { //抛出异常 return; } }
这个没有保存在本地,只是把编辑的word打开了
【Excel小技巧】
问题:
在工作时遇到的Excel表格整理,从不同的Excel列统计数据 粘到一个表中时,会发生【循环引用】,Excel保存关闭后再打开,出现提示信息:循环引用。现象:关闭一个Excel还有另一个Excel。
解决:2步
1、要取消循环引用,我们先把警告对话框关闭;鼠标再点击:文件→选项;
2、在excel选项界面,点击;公式→启用迭代计算。→点击:确定。
自关联对象在实际开发中用的还是比较多,例如常见的树形菜单。本文是自己实际的一个小测试,可以解决循环引用对象的json序列化问题,文笔不好请多见谅,如有错误请指出,希望有更好的解决方案,一起进步。
- 构造一个自关联实体
- 构造序列化数据
- 无任何处理序列化输出
可以看下面的表格数据是嵌套的
无任何处理直接序列化
- 解决
重写JsonResult, ReferenceLoopHandling.Ignore忽略其循环引用
调用
最终调用结果
转载于:https://www.cnblogs.com/glsoso/p/7125213.html