C#批量生成二维码并导出成表格

qemng 2017-12-30 05:59:30
做一个优惠券生成的工具,需要自动生成二维码优惠券,将生成的优惠券转换成可以打印的电子版文档,目前我的方式是用Microsoft.Office.Interop.Word类生成表格,然后将表格处理成需要的格式,处理好之后,在循环的向表格中插入二维码和文字,功能可以实现,但是在生成大量的优惠券(六七千张)时就会特别慢,太多就无法生成了,大家有没有比较好的方式去实现这个功能,不一定要生成word,只要生成可以打印的文档就行
...全文
829 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-01-02
  • 打赏
  • 举报
回复
像你 #7 示例的样式,显然是用 Excel 要方便的多 删除应从最后一页开始,删除掉后,原来的倒数第二页就成了最后一页 你只要在一个循环了去判断最后一页是否应该删除就可以了
qemng 2018-01-02
  • 打赏
  • 举报
回复

我想要生成这样的表格,左边的是二维码,右边的是数据,每张word里需要设计好生成多少张,每张之间的间隔要比较大,方便商家去裁剪,如果直接用table导出,每个券挨在一起,那样就没法裁剪了,我现在换了种方式,先把表格生成好了,默认最多1000张,然后现在有个问题,如果没有生成1000张的话,需要把后面多余的页删除,不然打印的时候就会打印很多页的空表格,但是删除不了,我在网上查了一个删除的方法,但是删不掉,不知道问题在哪里,大家帮忙看看为什么,下面是我删除的代码,我是做了一个循环,一页一页的删除。
object oMissing = System.Reflection.Missing.Value;
int pages = DocWord.ComputeStatistics(WdStatistic.wdStatisticPages, ref oMissing);
if (x > pages) x = pages;
object objWhat = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage;
object objWhich = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToAbsolute;

object objPage = num / 12 + 1;//指定页

Microsoft.Office.Interop.Word.Range range1 = wordDoc.GoTo(ref objWhat, ref objWhich, ref objPage, ref oMissing);
Microsoft.Office.Interop.Word.Range range2 = range1.GoToNext(Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage);

object objStart = range1.Start;
object objEnd = range2.Start;

if (range1.Start == range2.Start)
objEnd = wordDoc.Characters.Count;//最后一页
string str = wordDoc.Range(ref objStart, ref objEnd).Text;
if (string.IsNullOrEmpty(str.Trim()) || !str.Contains(name))//name是表格里的内容,判断这一页有没有文字,如果没有文字只是表格的话就删除
{

object Unit = (int)Microsoft.Office.Interop.Word.WdUnits.wdCharacter;
object Count = 1;
DocWord.Range(ref objStart, ref objEnd).Delete(ref Unit, ref Count);
}
by_封爱 版主 2018-01-02
  • 打赏
  • 举报
回复
生成html不就行了? 还简单....
wanghui0380 2018-01-02
  • 打赏
  • 举报
回复
????????? 你的客户既不需要保存,也不需要编辑。要什么导出? 压根不需要导出。至于打印么,还让人家裁剪?直接自动切纸,就好了。 人家简单了,你也简单了。就一个二维码按模板生成一张图,然后把这张图直接交给打印机打印 然后循环重复这个过程就好。所以在客户不保存,不编辑的前提下可以直接打印无需导出
  • 打赏
  • 举报
回复
刚刚做了一个excel打印多张图片的,你这种类似,有二维码就添加行,限制一行两个,有多少设置多少 if (i % 2 == 0) { IRow headerRow = sheet.CreateRow(rowIndex + i / 2); headerRow.HeightInPoints = 80; RowNum++; } AddPieChartMerage(sheet, workbook, paths[i], RowNum, StartCol + i % 2, 0);
devmiao 2017-12-31
  • 打赏
  • 举报
回复
用zxing.net这个库生成二维码
Luskyle 2017-12-31
  • 打赏
  • 举报
回复
对啊,把所有二维码放在一个N*M的<table>中,之后打印就行了。我也这样认为。但是没做过,楼主试试。
秋的红果实 2017-12-30
  • 打赏
  • 举报
回复
表格内容应该一样吧,干脆将表格也做成图片 用datagridview的一个单元格放这些图片(包括二维码) 直接打印datagridview即可 至于电子文档,让直接在datagridview里看,不比在word里看效果差吧
xuzuning 2017-12-30
  • 打赏
  • 举报
回复
保存成 html 都比保存成 Word 快,因为 Word 是封闭的包
xuzuning 2017-12-30
  • 打赏
  • 举报
回复
用 PrintDocument 直接打印 用 .Word 慢的原因是要保存成文件

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧