有word模板 用java如何生成word (word中某个单元格可能有多行数据)

现在有一个word模板,类似于下图
图片说明

其中A、B、C区域 数据行数不确定

我可能表述的不太清楚,望大神见谅,求赐教!

2个回答

这就是简单的合并单元格操作

生成word文档试试xdoc:
http://www.xdocin.com

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java POI操作word 合并单元格的问题,求大神解决!

问题是这样的,有一个word模板,模板里带表格需要根据需要动态的改变单元格样式,有可能 横向合并,也有可能纵向合并,求大神给解决思路或代码! 拜谢了!!!

使用JAVA的POI拆分word问题

我在用JAVA的POI读写word,如果我找到某些段落,想把这些段落重新生成一个word文件应该如何操作呢(用range的原因是我想保留原始word里头的格式,例如粗斜体)?比如说: HWPFDocument doc = new HWPFDocument(fs); Range range = doc.getRange(); for (int i = 0; i < range.numParagraphs(); i++) { //这里我想找到某些符合条件的段落,例如段落1,生成doc1,然后doc1.write(pathName)生成一个word文件 }

java如何根据Word模板,在指定位置插入表格

在不使用freemarker的情况下,如何根据Word模板,在指定位置插入表格

java根据模板修改内容后,生成word,修改后内容中文乱码

Java code package com.sunyard.test; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; public class OperatorRTF { /** * 字符串转换为rtf编码 * * @param content * @return */ public String strToRtf(String content) { try { System.out.println(content); content=new String(content.getBytes(),"GB2312"); System.out.println(content); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } char[] digital = "0123456789ABCDEF".toCharArray(); StringBuffer sb = new StringBuffer(""); byte[] bs = null; bs = content.getBytes(); int bit; for (int i = 0; i < bs.length; i++) { bit = (bs[i] & 0x0f0) >> 4; sb.append("\\'"); sb.append(digital[bit]); bit = bs[i] & 0x0f; sb.append(digital[bit]); } return sb.toString(); } /** * 替换文档的可变部分 * * @param content * @param replacecontent * @param flag * @return */ public String replaceRTF(String content, String replacecontent, int flag) { String rc = strToRtf(replacecontent); String target = ""; System.out.println(rc); if (flag == 0) { target = content.replace("$timetop$", rc); } if (flag == 1) { target = content.replace("$info$", rc); } if (flag == 2) { target = content.replace("$idea$", rc); } if (flag == 3) { target = content.replace("$advice$", rc); } if (flag == 4) { target = content.replace("$infosend$", rc); } return target; } /** * 获取文件路径 * * @param flag * @return */ public String getSavePath() { String path = "D:\\"; File fDirecotry = new File(path); if (!fDirecotry.exists()) { fDirecotry.mkdirs(); } return path; } /** * 半角转为全角 */ public String ToSBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 32) { c[i] = (char) 12288; continue; } if (c[i] < 127) { c[i] = (char) (c[i] + 65248); } } return new String(c); } public void rgModel(String username, String content) { /* 构建生成文件名 targetname:12时10分23秒_username_记录.rtf */ Date current = new Date(); SimpleDateFormat sdf = new java.text.SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); String targetname = sdf.format(current).substring(11, 13) + "时"; targetname += sdf.format(current).substring(14, 16) + "分"; targetname += sdf.format(current).substring(17, 19) + "秒"; targetname += "_" + username + "_记录.doc"; /* 字节形式读取模板文件内容,将结果转为字符串 */ String strpath = getSavePath(); String sourname = strpath + "\\" + "档案利用登记单.rtf"; String sourcecontent = ""; InputStream ins = null; try { ins = new FileInputStream(sourname); byte[] b = new byte[1024]; if (ins == null) { System.out.println("源模板文件不存在"); } int bytesRead = 0; while (true) { bytesRead = ins.read(b, 0, 1024); // return final read bytes // counts if (bytesRead == -1) {// end of InputStream System.out.println("读取模板文件结束"); break; } // convert to string using bytes sourcecontent += new String(b, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } /* 修改变化部分 */ String targetcontent = ""; /** * 拆分之后的数组元素与模板中的标识符对应关系 array[0]:timetop array[1]:info array[2]:idea * array[3]:advice array[4]:infosend */ String array[] = content.split("~"); // 2008年11月27日:更新模板之后时间无需自动填充 for (int i = 0; i < array.length; i++) { if (i == 0) { targetcontent = replaceRTF(sourcecontent, array[i], i); } else { targetcontent = replaceRTF(targetcontent, array[i], i); } } /* 结果输出保存到文件 */ try { FileWriter fw = new FileWriter(getSavePath() + "\\" + targetname, true); PrintWriter out = new PrintWriter(fw); System.out.println(targetcontent); if (targetcontent.equals("") || targetcontent == "") { out.println(sourcecontent); } else { out.println(targetcontent); } out.close(); fw.close(); System.out.println(getSavePath() + " 该目录下生成文件" + targetname + " 成功"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { OperatorRTF oRTF = new OperatorRTF(); // 被替换内容以"~"符号分割,处理的时候将其拆分为数组即可 String content = "2008Y10M12D9H-2008Y10M12D6H~idea~look~我们参照检验药品的方法~we"; oRTF.rgModel("cheney", content); } } 上面的代码是我在网上找到的一种java操作word的方法 java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。 ----- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。 ----- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。 1、采用字节的形式读取rtf模板内容 2、将可变的内容字符串转为rtf编码 3、替换原文中的可变部分,形成新的rtf文档 这是原作者的想法,可我在使用过程中,发现替换内容中(我们参照检验药品的方法)这个中文,是不能显示的,在word里,把它转换成了iso-8859-1的编码了,不能正常显示中文,我都不知道应该在哪设置编码,才能让它正常显示,原word模板中的中文,可以正常显示,应该是在读取word模板的时候,把编码方式也读进去了,现在就是想请教一下前辈们,应该如何后,自己修改的那些中文,也可以正常显示呢 [b]问题补充:[/b] 汗,这里好象自己不能回复,所以我以这种形式回复。 先感谢一楼,二楼的回答,昨天我有事,请假没上班,所以没能及时回复,先道个歉。 先回答1楼的,在写的时候,我设置编码的话,感觉是无效的,不管我怎么设置,都没用。 再回答2楼的,特别说一下,我试了一下,发现生成的word里,那些修改部分的中文的编码形式改变了,只是还是乱码。后来我把unicode,ISO-8859-1,UTF-8,GB2312,GBK,甚至ASCII都试过了, word里都是不同形式的乱码,就是不出现汉字,真闷,我感觉是在 bs = content.getBytes("unicode"); 后,系统后来又默认的把这把转成了ISO-8859-1的形式. 可是 bs = content.getBytes("ISO-8859-1"); 我这么设置,word里的汉字是????? 真不知道为什么,要是ISO-8859-1,转ISO-8859-1,应该不会改变的哎 希望高手们,能继续解答,谢谢 [b]问题补充:[/b] 汪兆铭,您好,我不知道您一直观注这个问题,我以为要过会才能看到您的回答,所以,现在才刷新了这个页面,不好意思,先道个歉。 现在回到问题中,我照您的意思, bs = content.getBytes("unicode"); 改了一下,然后输入,可是依然不能正常显示中文,是不是,在哪,还需要再转换一次呢? [b]问题补充:[/b] mirzlm@126.com 谢谢,不知道与jdk版本或是什么的没有关系 [b]问题补充:[/b] 汪兆铭,您好,我看了一下您发的东西,我发现了问题的所在,竟然是在表格单元格里面的,就替换出来的是乱码,在表格单元格外面的,是可以正常显示的,您可以去试试,把替换的那个,放在表格里,看看,会不会成功,谢谢你的帮助 [b]问题补充:[/b] 谢谢您,给我这么多的帮助,那应该是我的那个rtf模板的问题了,真的很感谢,谢谢,谢谢,再谢谢

POI模板导出时单元格合并都没了。

POI使用的模板导出 ![模板](https://img-ask.csdn.net/upload/201906/04/1559633127_180552.jpg) java代码: ![图片说明](https://img-ask.csdn.net/upload/201906/04/1559633179_257355.jpg) 导出结果: ![图片说明](https://img-ask.csdn.net/upload/201906/04/1559633234_28277.jpg) 可以看出导出的结果所有单元格都是未合并状态

jacob,如何在word文档里生成柱状的统计图,以及图表的样式设置,如下图的样式,求源代码,谢谢了

![图片说明](https://img-ask.csdn.net/upload/201702/08/1486522175_674288.png) 这是一部分自己做的代码,但是不知道怎么设置统计图的样式 public void setChartDate(String filepath,String pos,List<Object[]> list){ ActiveXComponent word=null; Dispatch doc=null; Dispatch graph=null; try{ word = new ActiveXComponent("Word.Application");//开启 //得到word对象的处于活动状态的Document Dispatch documents = Dispatch.get(word,"Documents").toDispatch(); //打开已经存在的word对象如果是新建一个word文件的话,需要将Open换成Add,然后去掉filepath参数即可 doc = Dispatch.call(documents, "Open",filepath).toDispatch(); //得到该对象的编辑区域 Dispatch selection = Dispatch.get(word, "Selection").toDispatch(); //设置该对象不可见 Dispatch.put(word, "Visible", new Variant(false)); //插入ole对象 Dispatch inLine =Dispatch.get(selection,"InlineShapes").toDispatch(); graph=Dispatch.call(inLine, "AddOLEObject","MSGraph.Chart.8").toDispatch(); //设置图表的高度 Dispatch.put(graph, "Height", new Variant(200.00)); //设置表的宽度 Dispatch.put(graph, "Width", new Variant(350.00)); //格式化图表 Dispatch oleFormat = Dispatch.call(graph,"OLEFormat").toDispatch(); Dispatch obj = Dispatch.call(oleFormat, "Object").toDispatch(); Dispatch dataSheet = Dispatch.get(obj, "Application").toDispatch(); Dispatch dataSheet2 = Dispatch.get(dataSheet, "dataSheet").toDispatch(); //得到该图表的数据表 //得到数据表的单元格 Dispatch cells = Dispatch.get(dataSheet2, "Cells").toDispatch(); //得到数据表的行 //Dispatch rows= Dispatch.get(cells, "Rows").toDispatch(); // System.out.println(rows); //清空数据表行的默认数据 //Dispatch.call(rows, "Clear"); //for循环添加数据 for(int i=0;i<list.size();i++){ Object[] o=list.get(i); for(int j=0;j<o.length;j++){ Dispatch item = Dispatch.call(cells, "Item",new Variant(i+2),new Variant(j+2)).toDispatch(); Dispatch.put(item, "value", o[i]); } } if (find(selection,pos)) { Dispatch textRange = Dispatch.get(selection, "Range") .toDispatch(); Dispatch.call(textRange, "Paste"); } }catch(Exception e){ e.printStackTrace(); }finally{ //关闭word文档,参数表示是否保存 Dispatch.call(doc, "Close",new Variant(true)); //退出word文档,这步和关闭一样,因为只关闭不退出,该word的进程不会结束 Dispatch.call(word, "Quit",new Variant(0)); //释放word编辑的时候引用的其他资源,比如Graph.exe进程 ComThread.Release(); doc=null; graph=null; word=null; } } 求大神帮忙解决一下,万分感谢

使用POI解析Word时如何获取存在于一个table中的一个单元格中的table,即图片中的内部表,贴上部分代码

![图片说明](https://img-ask.csdn.net/upload/201906/27/1561639475_731284.png) ``` ``` //外部表格循环 while (tab.hasNext()){ Table table = tab.next(); System.out.println("第\t"+(pivot+1)+"\t个表"); //pivot==0表示第一个表 if (pivot==0){ //获取第一行第一列,需要获取这个单元格内的table TableCell firstCellIn0 = table.getRow(0).getCell(0); //获取范围(第一行第一列)内的table TableIterator iterator=new TableIterator(firstCellIn0); while (iterator.hasNext()){ Table innerTab = iterator.next(); System.out.println("内部表行数="+innerTab.numRows()); for (int i = 0; i < innerTab.numRows(); i++) { TableRow oneRow = innerTab.getRow(i); for (int j = 0; j < oneRow.numCells(); j++) { TableCell oneCell = oneRow.getCell(j); System.out.print(oneCell.text()+"\t"); } } } } pivot++; }

如何用POI或docx4j向word表格中的单元格插入多张图片

``` public void addPictureToWord() throws Exception{ // 模板文件路径 String templatePath = "E:\\POIToWord.docx"; // 生成的文件路径 String targetPath = "E:\\target.docx"; // 书签名 String bookmarkName = "picture"; // 图片路径 String imagePath = "E:\\timg.png"; String imagePath1 = "E:\\timg1.png"; // 载入模板文件 WordprocessingMLPackage wPackage = WordprocessingMLPackage.load(new FileInputStream(templatePath)); // 提取正文 MainDocumentPart mainDocumentPart = wPackage.getMainDocumentPart(); Document wmlDoc = (Document) mainDocumentPart.getJaxbElement(); Body body = wmlDoc.getBody(); // 提取正文中所有段落 List<Object> paragraphs = body.getContent(); // 提取书签并创建书签的游标 RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange"); new TraversalUtil(paragraphs, rt); // 遍历书签 for (CTBookmark bm:rt.getStarts()) { // 这儿可以对单个书签进行操作,也可以用一个map对所有的书签进行处理 if (bm.getName().equals(bookmarkName)){ // 读入图片并转化为字节数组,因为docx4j只能字节数组的方式插入图片 InputStream is = new FileInputStream(imagePath); InputStream is1 = new FileInputStream(imagePath1); byte[] bytes = IOUtils.toByteArray(is); byte[] bytes1 = IOUtils.toByteArray(is1); byte[][] bss = {bytes,bytes1}; // 创建一个行内图片 BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wPackage, bss[0]); // BinaryPartAbstractImage imagePart1 = BinaryPartAbstractImage.createImagePart(wPackage, bss[1]); // createImageInline函数的前四个参数我都没有找到具体啥意思,,,, // 最有一个是限制图片的宽度,缩放的依据 Inline inline = imagePart.createImageInline(null, null, 0,1, false, 1200); // Inline inline1 = imagePart1.createImageInline(null, null, 0,1, false, 1200); // 获取该书签的父级段落 P p = (P)(bm.getParent()); ObjectFactory factory = new ObjectFactory(); // R对象是匿名的复杂类型,然而我并不知道具体啥意思 R run = factory.createR(); // drawing理解为画布? org.docx4j.wml.Drawing drawing = factory.createDrawing(); drawing.getAnchorOrInline().add(inline); // drawing.getAnchorOrInline().add(inline1); run.getContent().add(drawing); p.getContent().add(run); } } wPackage.save(new FileOutputStream(targetPath)); } 注释部分的代码是我自己后续添加的,想通过这样来实现同一个单元格插入多张图片的功能,结果。。。 变成了灾难性的故障。 希望各位大神帮帮忙修改一下代码! ```

利用java进行excel模板开发的时候,如何控制单元格可以自动换行以显示全部的数据?

利用java进行excel模板开发的时候,如何控制单元格可以自动换行以显示全部的数据?求大神解答,不胜感激!

java中使用freemarker和Itext生成pdf文件,但是生成的表格中内容不换行

java中使用freemarker和Itext生成pdf文件,但是生成的表格中内容不换行。我是先用freemarker生成html文件,再用itext生成的pdf,模板上也设置了table的换行的羊水,但是没有生效

poi导出word ,中文 字体样式 问题?

poi导出word时,给中文设置 字体的类型时,不管用,打开word后,字体变成默认的“宋体”了,如果给英文设置,字体的类型就好使,setFontFamily()这个方法,怎么能对中文设置的字体类型好使呢,有木有别的办法?求指教 导出word ,中文 字体样式 问题? 【南京·10月17日】OSC源创会开始报名:Swift、大型移动项目构架分享 » @红薯 你好,想跟你请教个问题:poi导出word时,给中文设置 字体的类型时,不管用,打开word后,字体变成默认的“宋体”了,如果给英文设置,字体的类型就好使,setFontFamily()这个方法,怎么能对中文设置的字体类型好使呢,有木有别的办法?求指教 XWPFRun newRun = para.insertNewRun(i); //复制样式 newRun.setText(runText); newRun.setColor(run.getColor()); newRun.setFontFamily(run.getFontFamily()); if (run.getFontSize() > 0) { newRun.setFontSize(run.getFontSize()); } else { newRun.setFontSize(12); } newRun.setUnderline(run.getUnderline()); newRun.setBold(run.isBold()); newRun.setItalic(run.isItalic()); newRun.setStrike(run.isStrike());

请问easypoi模板导出表格的时候,怎样才能实现单元格内强制换行呢?

请问easypoi模板导出表格的时候,怎样才能实现单元格内强制换行呢?

使用poi操作word时如何在有多个表格的word中定位到其中一个表格。

XWPFTable table1=new XWPFTable(cttbl, docx); 这里的cttbl是什么?如何设置一个表格的cttbl?

如何使用jacob在word中的指定位置插入图片

项目中需要将客户提交的文字图片 按照一定格式插入一个word模板 例如 如何将图片插入表格单元格的中心或者右下角位置 多谢!

freemarker能生成复杂形式的excel,我想同时也生成图片

freemarker能生成复杂形式的excel,我想同时也生成图片,网上只有word的可以带图片 有没有好的方法

aspose.words 动态生成表格的问题,有谁用过吗?麻烦帮忙解决下

我的一个word里面有多个表格,会定义多个标签,但是获取动态生成表格的宽度时就会出问题?如何获取某个标签下的表格宽度呢? List widthList = new List(); if (doc.Range.Bookmarks["POregTable" + k + ""] != null) { for (int i = 0; i < dtsearch.Columns.Count; i++) { builder.MoveToCell(0, 0, i, 0); //移动单元格 double width = builder.CellFormat.Width;//获取单元格宽度 widthList.Add(width); } } ``` ``` 这里获取单元格的宽度好像不是我所需要的那个宽度? 如果注视掉此处代码的话,或生成后的表格宽度与标题表格宽度不同。 麻烦大神帮忙解决下。 谢谢

java POI3.8 Excel 下载 发现不可读取内容 解决办法??

![图片说明](https://img-ask.csdn.net/upload/201701/17/1484635471_937430.png) ![图片说明](https://img-ask.csdn.net/upload/201701/17/1484635688_899413.png) ``` /** * 导出历史记录 */ @SuppressWarnings({ "deprecation", "unchecked" }) @RequestMapping("export-TrainHistoryRecord") @ResponseBody protected void buildExcelDocument(EmployeeTrainHistoryQuery query,ModelMap model, SXSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { //这里使用SXSSFWorkbook对象,支持1048576条数据 try { response.reset(); // 获得国际化语言 RequestContext requestContext = new RequestContext(request); String CourseCompany = requestContext .getMessage("manage-student-trainRecods"); response.setContentType("APPLICATION/vnd.ms-excel;charset=UTF-8"); // 注意,如果去掉下面一行代码中的attachment; 那么也会使IE自动打开文件。 response.setHeader( "Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode( DateUtil.getExportDate() + ".xlsx", "UTF-8"));//Excel 扩展名指定为xlsx SXSSFWorkbook对象只支持xlsx格式 OutputStream os = response.getOutputStream();// new CellStyle style = workbook.createCellStyle(); // 设置样式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); String employeeCode = requestContext.getMessage("employeeCode"); String employeeName = requestContext.getMessage("employeeName"); String orgName = requestContext.getMessage("orgName"); String startDate = requestContext.getMessage("start.date"); String endDate = requestContext.getMessage("end.date"); String courseCode = requestContext.getMessage("courseCode"); String courseName = requestContext.getMessage("courseName"); String sessionName = requestContext.getMessage("sessionName"); String hoursNunber = requestContext.getMessage("hoursNunber"); // FileOutputStream(filePath); List<EmployeeTrainHistoryModel> list = null; query.setNeedQueryAll(true); try { // if("0".equals(query.getTrainFlag())){ query.setTotalItem(employeeTrainHistoryService.fetchCountEmployeeTrainHistoryByQuery(query)); int page_size = 100000;// 数据库中存储的数据行数 int list_count =query.getTotalItem(); int export_times = list_count % page_size > 0 ? list_count / page_size + 1 : list_count / page_size; for (int m = 0; m < export_times; m++) { query.setNeedQueryAll(false); query.setPageSize(100000);//每页显示多少条数据 query.setCurrentPage(m+1);//设置第几页 list=employeeTrainHistoryService.getEmployeeTrainHistoryByQuery(query); int len = list.size() < page_size ? list.size() : page_size; //新建sheet Sheet sheet = null; sheet = workbook.createSheet(System.currentTimeMillis() + CourseCompany+m); // for (int n = 0; n < len; n++) { // 迭代数据 if (list != null && list.size() > 0) { int rowNum = 1; int max_row=300000; int sheet_count=0; for (int i = 0; i < list.size(); i++) { EmployeeTrainHistoryModel history=list.get(i); //如果当前行超过单页签可容纳最大行则换页签 // if(i==0||i==(max_row*sheet_count+1)){ sheet.setDefaultColumnWidth((short) 17); // 创建属于上面Sheet的Row,参数0可以是0~65535之间的任何一个, Row header = sheet.createRow(0); // 第0行 // 产生标题列 Cell cell; String[] headerArr = new String[] { employeeCode, employeeName, orgName, startDate, endDate, courseCode, courseName, sessionName, hoursNunber }; for (int j = 0; j < headerArr.length; j++) { cell = header.createCell((short) j); cell.setCellStyle(style); cell.setCellValue(headerArr[j]); } Row row = sheet.createRow(rowNum++); row.createCell((short) 0).setCellValue( history.getEmployeeCode()); row.createCell((short) 1).setCellValue( history.getEmployeeName()); row.createCell((short) 2) .setCellValue(history.getOrgName()); if (history.getTrainBeginTime() != null) { row.createCell((short) 3).setCellValue( DateUtil.toString(history.getTrainBeginTime())); } else { row.createCell((short) 3).setCellValue(""); } if (history.getTrainEndTime() != null) { row.createCell((short) 4).setCellValue( DateUtil.toString(history.getTrainEndTime())); } else { row.createCell((short) 4).setCellValue(""); } row.createCell((short) 5).setCellValue( history.getCourseCode()); row.createCell((short) 6).setCellValue( history.getCourseName()); row.createCell((short) 7).setCellValue( history.getSessionName()); if (history.getHoursNumber() != null) row.createCell((short) 8).setCellValue( history.getHoursNumber().toString()); } } list.clear(); } } catch (Exception e) { e.printStackTrace(); } try { workbook.write(os); model.put("msg", "1"); os.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } ```

c# Aspose设置单元格格式

代码如下,两个对应的list集合,带入aspose中,用公式算出XIRR数据,大多数都是可以算出来,也可以读取出来,只有一条数据,随便造的数据有问题,读取不出来, A B C 33333.33 2017/02/01 -0.9702 33851.85 2017/03/01 33620.37 2017/03/01 10000 2017/03/01 -100000 2017/03/04 如上数据,直接保存的EXCEL中也是有值的,就是worksheet.Cells["C1"].DoubleValue;获取不到值,这是为什么呢,有没有大神解读下,上面注释代码为测试代码直接读取也是不行的。 public static double XIRR(IList<double> values, IList<DateTime> dates) { //Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook("G:\\ceshi.xlsx"); ////workbook.("G:\\ceshi.xlsx"); //Cells cells = workbook.Worksheets[0].Cells; //string str1 = cells["A1"].StringValue; //string str2 = cells["C1"].StringValue; int count = values.Count; Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(); Aspose.Cells.Worksheet worksheet = workbook.Worksheets[0]; for (int i = 0; i < count; i++) { worksheet.Cells[string.Format("A{0}", (i + 1))].PutValue(values[i]); worksheet.Cells[string.Format("B{0}", (i + 1))].PutValue(dates[i].ToString("yyyy/MM/dd")); } worksheet.Cells["C1"].Formula = string.Format("=ROUND(XIRR(A1:A{0}, B1:B{1}),4)", count, count); workbook.CalculateFormula(); //workbook.Save("G://ceshi.xlsx"); return worksheet.Cells["C1"].DoubleValue; }

jacob 对指定word摸板 替换,为什么图片替换不了啊 求大神指教

import java.util.HashMap; import java.util.Iterator; import java.util.List; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class Jacob { private boolean saveOnExit; /** * word文档 */ private Dispatch doc = null; /** * word运行程序对象 */ private ActiveXComponent word; /** * 所有word文档 */ private Dispatch documents; /** * 构造函数 */ public Jacob() { saveOnExit = false; word = new ActiveXComponent("Word.Application"); word.setProperty("Visible", new Variant(false)); documents = word.getProperty("Documents").toDispatch(); } /** * 设置参数:退出时是否保存 * * @param saveOnExit * true-退出时保存文件,false-退出时不保存文件 */ public void setSaveOnExit(boolean saveOnExit) { this.saveOnExit = saveOnExit; } /** * 得到参数:退出时是否保存 * * @return boolean true-退出时保存文件,false-退出时不保存文件 */ public boolean getSaveOnExit() { return saveOnExit; } /** * 打开文件 * * @param inputDoc * 要打开的文件,全路径 * @return Dispatch 打开的文件 */ public Dispatch open(String inputDoc) { return Dispatch.call(documents, "Open", inputDoc).toDispatch(); } /** * 选定内容 * * @return Dispatch 选定的范围或插入点 */ public Dispatch select() { return word.getProperty("Selection").toDispatch(); } /** * 把选定内容或插入点向上移动 * * @param selection * 要移动的内容 * @param count * 移动的距离 */ public void moveUp(Dispatch selection, int count) { for (int i = 0; i < count; i++) Dispatch.call(selection, "MoveUp"); } /** * 把选定内容或插入点向下移动 * * @param selection * 要移动的内容 * @param count * 移动的距离 */ public void moveDown(Dispatch selection, int count) { for (int i = 0; i < count; i++) Dispatch.call(selection, "MoveDown"); } /** * 把选定内容或插入点向左移动 * * @param selection * 要移动的内容 * @param count * 移动的距离 */ public void moveLeft(Dispatch selection, int count) { for (int i = 0; i < count; i++) Dispatch.call(selection, "MoveLeft"); } /** * 把选定内容或插入点向右移动 * * @param selection * 要移动的内容 * @param count * 移动的距离 */ public void moveRight(Dispatch selection, int count) { for (int i = 0; i < count; i++) Dispatch.call(selection, "MoveRight"); } /** * 把插入点移动到文件首位置 * * @param selection * 插入点 */ public void moveStart(Dispatch selection) { Dispatch.call(selection, "HomeKey", new Variant(6)); } /** * 从选定内容或插入点开始查找文本 * * @param selection * 选定内容 * @param toFindText * 要查找的文本 * @return boolean true-查找到并选中该文本,false-未查找到文本 */ public boolean find(Dispatch selection, String toFindText) { if (toFindText == null || toFindText.equals("")) return false; // 从selection所在位置开始查询 Dispatch find = Dispatch.call(selection, "Find").toDispatch(); // 设置要查找的内容 Dispatch.put(find, "Text", toFindText); // 向前查找 Dispatch.put(find, "Forward", "True"); // 设置格式 Dispatch.put(find, "Format", "True"); // 大小写匹配 Dispatch.put(find, "MatchCase", "True"); // 全字匹配 Dispatch.put(find, "MatchWholeWord", "True"); // 查找并选中 System.out.println(Dispatch.call(find, "Execute").getBoolean()); return Dispatch.call(find, "Execute").getBoolean(); } /** * 把选定内容替换为设定文本 * * @param selection * 选定内容 * @param newText * 替换为文本 */ public void replace(Dispatch selection, String newText) { // 设置替换文本 Dispatch.put(selection, "Text", newText); } /** * 全局替换 * * @param selection * 选定内容或起始插入点 * @param oldText * 要替换的文本 * @param newText * 替换为文本 */ public void replaceAll(Dispatch selection, String oldText, Object replaceObj) { // 移动到文件开头 moveStart(selection); if (oldText.startsWith("table") || replaceObj instanceof List) { replaceTable(selection, oldText, (List) replaceObj); } else { String newText = (String) replaceObj; if (oldText.indexOf("image") != -1 || newText.lastIndexOf(".bmp") != -1 || newText.lastIndexOf(".jpg") != -1 || newText.lastIndexOf(".gif") != -1) while (find(selection, oldText)) { replaceImage(selection, newText); Dispatch.call(selection, "MoveRight"); } else while (find(selection, oldText)) { replace(selection, newText); Dispatch.call(selection, "MoveRight"); } } } /** * 替换图片 * * @param selection * 图片的插入点 * @param imagePath * 图片文件(全路径) */ public void replaceImage(Dispatch selection, String imagePath) { Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(), "AddPicture", imagePath); } /** * 替换表格 * * @param selection * 插入点 * @param tableName * 表格名称,形如table$1@1、table$2@1...table$R@N,R代表从表格中的第N行开始填充, * N代表word文件中的第N张表 * @param fields * 表格中要替换的字段与数据的对应表 */ public void replaceTable(Dispatch selection, String tableName, List dataList) { if (dataList.size() == 1) { System.out.println("Empty table!"); return; } // 要填充的列 String[] cols = (String[]) dataList.get(0); // 表格序号 String tbIndex = tableName.substring(tableName.lastIndexOf("@") + 1); // 从第几行开始填充 int fromRow = Integer.parseInt(tableName.substring( tableName.lastIndexOf("$") + 1, tableName.lastIndexOf("@"))); // 所有表格 Dispatch tables = Dispatch.get(doc, "Tables").toDispatch(); // 要填充的表格 Dispatch table = Dispatch.call(tables, "Item", new Variant(tbIndex)) .toDispatch(); // 表格的所有行 Dispatch rows = Dispatch.get(table, "Rows").toDispatch(); // 填充表格 for (int i = 1; i < dataList.size(); i++) { // 某一行数据 String[] datas = (String[]) dataList.get(i); // 在表格中添加一行 if (Dispatch.get(rows, "Count").getInt() < fromRow + i - 1) Dispatch.call(rows, "Add"); // 填充该行的相关列 for (int j = 0; j < datas.length; j++) { // 得到单元格 Dispatch cell = Dispatch.call(table, "Cell", Integer.toString(fromRow + i - 1), cols[j]) .toDispatch(); // 选中单元格 Dispatch.call(cell, "Select"); // 设置格式 Dispatch font = Dispatch.get(selection, "Font").toDispatch(); Dispatch.put(font, "Bold", "0"); Dispatch.put(font, "Italic", "0"); // 输入数据 Dispatch.put(selection, "Text", datas[j]); } } } /** * 保存文件 * * @param outputPath * 输出文件(包含路径) */ public void save(String outputPath) { Dispatch.call( (Dispatch) Dispatch.call(word, "WordBasic").getDispatch(), "FileSaveAs", outputPath); } /** * 关闭文件 * * @param document * 要关闭的文件 */ public void close(Dispatch doc) { Dispatch.call(doc, "Close", new Variant(saveOnExit)); } /** * 退出程序 * */ public void quit() { word.invoke("Quit", new Variant[0]); ComThread.Release(); } /** * 根据模板、数据生成word文件 * * @param inputPath * 模板文件(包含路径) * @param outPath * 输出文件(包含路径) * @param data * 数据包(包含要填充的字段、对应的数据) */ public void toWord(String inputPath, String outPath, HashMap data) { String oldText; Object newValue; ComThread.InitSTA(); try { doc = open(inputPath); Dispatch selection = select(); Iterator keys = data.keySet().iterator(); while (keys.hasNext()) { oldText = (String) keys.next(); newValue = data.get(oldText); replaceAll(selection, oldText, newValue); } save(outPath); } catch (Exception e) { // debug.println("toword[Java2Word]------------操作word文件失败!"+e.getMessage(),true); } finally { if (doc != null) { close(doc); } quit(); } } public static void main(String[] args) throws Exception { Jacob j = new Jacob(); String inputPath = "C:/Users/Administrator/Desktop/精英国际简历-中文.doc"; String outPath = "C:/Users/Administrator/Desktop/test1.doc"; HashMap<String, String> data = new HashMap<String, String>(); data.put("java开发", "程序猿"); data.put("赵伟", "安夏"); data.put("D:/c.jpg", "D:/b.jpg"); j.toWord(inputPath, outPath, data); System.out.println("别泡大哥啊"); } }

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

linux2.6.1内核源码注释

包含LINUX内核同步、信号、内存、调度、文件系统、网络系统、时钟等部分的源码注释。前后历时三年,算是干货。

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

零基础学C#编程—C#从小白到大咖

本课程从初学者角度出发,提供了C#从入门到成为程序开发高手所需要掌握的各方面知识和技术。 【课程特点】 1 由浅入深,编排合理; 2 视频讲解,精彩详尽; 3 丰富实例,轻松易学; 4 每章总结配有难点解析文档。 15大章节,228课时,1756分钟与你一同进步!

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

编程实现学生基本信息管理程序

编程实现学生基本信息管理程序。学生基本信息包括:学号、姓名、性别、年龄、班级、学院、专业等。具体实现的管理功能如下: (1) 输入并显示多个学生的基本信息; (2) 可根据需要实现学生信息的添加; (

机器学习实战系列套餐(必备基础+经典算法+案例实战)

机器学习实战系列套餐以实战为出发点,帮助同学们快速掌握机器学习领域必备经典算法原理并结合Python工具包进行实战应用。建议学习顺序:1.Python必备工具包:掌握实战工具 2.机器学习算法与实战应用:数学原理与应用方法都是必备技能 3.数据挖掘实战:通过真实数据集进行项目实战。按照下列课程顺序学习即可! 课程风格通俗易懂,用最接地气的方式带领大家轻松进军机器学习!提供所有课程代码,PPT与实战数据,有任何问题欢迎随时与我讨论。

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

玩转Linux:常用命令实例指南

人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 --------------------------------------------------------------- 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+700元编程礼包。 &nbsp;

基于STM32的电子时钟设计

时钟功能 还有闹钟功能,温湿度功能,整点报时功能 你值得拥有

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

Git 实用技巧

这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。

计算机组成原理算法实现

计算机组成原理算法实现,能够实现定点小数的机器数表示、定点小数的变形补码加减运算、定点小数的原码一位乘法运算和浮点数的加减运算。

为linux系统设计一个简单的二级文件系统

实验目的: 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。 实验要求: 为linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条)

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

2019全国大学生数学建模竞赛C题原版优秀论文

2019全国大学生数学建模竞赛C题原版优秀论文,PDF原版论文,不是图片合成的,是可编辑的文字版。共三篇。 C044.pdf C137.pdf C308.pdf

土豆SDK(Java版)-非官方

由于土豆SDK一直建设中,最近几天抽空写了一套java的SDK。包含了现有的所有请求协议。本套SDK中仅提供了oAuth的方式(引用oAuth.net的java版示例),并没有在框架中实现,涉及到登录

Android小项目——新闻APP(源码)

Android小项目——新闻APP(源码),一个很简单的可以练手的Android Demo Ps:下载之前可以先看一下这篇文章——https://blog.csdn.net/qq_34149526/a

实用主义学Python(小白也容易上手的Python实用案例)

原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

相关热词 c# 开发接口 c# 中方法上面的限制 c# java 时间戳 c#单元测试入门 c# 数组转化成文本 c#实体类主外键关系设置 c# 子函数 局部 c#窗口位置设置 c# list 查询 c# 事件 执行顺序
立即提问