请教一些Aspose.Word实现自动编号

反转皇潮 2018-10-15 03:43:59
简单说明:
现在有个需求,要求的是生成出来的Word,用户删除某一行时,编号能自动调整,插件我用的不熟,小白一个。
API也看不怎么明白


如图


我是用 builder.Write(); 这个来写的,序号自动调整肯定是实现不了的,几经辗转好像说itemlist 是可实现,但是还是没找到怎么使用,问问大家啦,要生成的Word是个表格,
序号
1.
1.1
1.2
2.
2.1
2.2

这样的序号
...全文
1023 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
反转皇潮 2018-11-13
  • 打赏
  • 举报
回复
谢谢 “Hello World,” 按照你的列子 我弄出来了
Hello World, 2018-11-12
  • 打赏
  • 举报
回复

        public void TableListsTest()
{
Aspose.Words.Document doc = new Aspose.Words.Document();
Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);
Aspose.Words.Tables.Table table = builder.StartTable();

Aspose.Words.Lists.List numberedList = doc.Lists.Add(ListTemplate.NumberDefault);
numberedList.ListLevels[1].NumberStyle = NumberStyle.Arabic;
numberedList.ListLevels[1].NumberFormat = "\x0000.\x0001";

builder.InsertCell();
builder.ListFormat.List = numberedList;
builder.Write("主一");

builder.InsertCell();
builder.ListFormat.RemoveNumbers();
builder.Write("文件名称");
builder.InsertCell();
builder.Write("规格");
builder.InsertCell();
builder.Write("签字");
builder.InsertCell();
builder.Write("备注");
builder.EndRow();//

builder.InsertCell();
builder.ListFormat.List = numberedList;
builder.ListFormat.ListIndent();
builder.Write("子1");
builder.InsertCell();
builder.ListFormat.RemoveNumbers();
builder.Write("文件名称");
builder.InsertCell();
builder.Write("规格");
builder.InsertCell();
builder.Write("签字");
builder.InsertCell();
builder.Write("备注");
builder.EndRow();//

builder.InsertCell();
builder.ListFormat.List = numberedList;
builder.ListFormat.ListIndent();
builder.Write("子2");
builder.InsertCell();
builder.ListFormat.RemoveNumbers();
builder.Write("文件名称");
builder.InsertCell();
builder.Write("规格");
builder.InsertCell();
builder.Write("签字");
builder.InsertCell();
builder.Write("备注");
builder.EndRow();//结束此行的标记

builder.EndTable();
builder.ListFormat.RemoveNumbers();//编号结束
doc.Save(@"C:\111.docx");
}
反转皇潮 2018-11-12
  • 打赏
  • 举报
回复
引用 7 楼 apollokk 的回复:
官方示例里面有个ExLists.cs,可以好好参考下
不好意思 我找了好久 都没有找到 现在这个问题还是没有解决 我在第一个单元格使用 builder.ListFormat.ApplyNumberDefault(); 之后不需要序号的单元格都会出现序号 ,怎么才可以只=只让每行第一个单元格出现序号
Hello World, 2018-10-16
  • 打赏
  • 举报
回复
大概是这样:
            Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

builder.ListFormat.ApplyNumberDefault();

builder.Writeln("Item 1");
builder.Writeln("Item 2");

builder.ListFormat.ListIndent();

builder.Writeln("Item 2.1");
builder.Writeln("Item 2.2");

builder.ListFormat.ListIndent();

builder.Writeln("Item 2.2.1");
builder.Writeln("Item 2.2.2");

builder.ListFormat.ListOutdent();

builder.Writeln("Item 2.3");

builder.ListFormat.ListOutdent();

builder.Writeln("Item 3");

builder.ListFormat.RemoveNumbers();

自己套上表格试下,直接在WORD里操作,设置Selection.Range.ListFormat是可以的
反转皇潮 2018-10-16
  • 打赏
  • 举报
回复
引用 2 楼 God_Girl 的回复:
生成Word必定数据源有撒,在数据源里面排序就行了啊,例如:我这里是list的查询数据
IList<User> l=new List<User>();
l.OrderBy(x=>x.LastLoginTime)




用户要求的是 word下载后 再去编辑某一行 ,如删除 ,序号要自动调整 ,并不是不会算序号,用builder.Write();这个方发做的,下载后再去调整不行的
  • 打赏
  • 举报
回复
生成Word必定数据源有撒,在数据源里面排序就行了啊,例如:我这里是list的查询数据
IList<User> l=new List<User>();
l.OrderBy(x=>x.LastLoginTime)
反转皇潮 2018-10-16
  • 打赏
  • 举报
回复
Hello World, 2018-10-16
  • 打赏
  • 举报
回复
官方示例里面有个ExLists.cs,可以好好参考下
Hello World, 2018-10-16
  • 打赏
  • 举报
回复
试下第二列builder.ListFormat.RemoveNumbers();,下一行再builder.ListFormat.ApplyNumberDefault();
官方示例:
        public void ApplyDefaultBulletsAndNumbers()
{
//ExStart
//ExFor:DocumentBuilder.ListFormat
//ExFor:ListFormat.ApplyNumberDefault
//ExFor:ListFormat.ApplyBulletDefault
//ExFor:ListFormat.ListIndent
//ExFor:ListFormat.ListOutdent
//ExFor:ListFormat.RemoveNumbers
//ExSummary:Shows how to apply default bulleted or numbered list formatting to paragraphs when using DocumentBuilder.

DocumentBuilder builder = new DocumentBuilder();

builder.Writeln("Aspose.Words allows:");
builder.Writeln();

// Start a numbered list with default formatting.
builder.ListFormat.ApplyNumberDefault();
builder.Writeln("Opening documents from different formats:");

// Go to second list level, add more text.
builder.ListFormat.ListIndent();
builder.Writeln("DOC");
builder.Writeln("PDF");
builder.Writeln("HTML");

// Outdent to the first list level.
builder.ListFormat.ListOutdent();
builder.Writeln("Processing documents");
builder.Writeln("Saving documents in different formats:");

// Indent the list level again.
builder.ListFormat.ListIndent();
builder.Writeln("DOC");
builder.Writeln("PDF");
builder.Writeln("HTML");
builder.Writeln("MHTML");
builder.Writeln("Plain text");

// Outdent the list level again.
builder.ListFormat.ListOutdent();
builder.Writeln("Doing many other things!");

// End the numbered list.
builder.ListFormat.RemoveNumbers();
builder.Writeln();

builder.Writeln("Aspose.Words main advantages are:");
builder.Writeln();

// Start a bulleted list with default formatting.
builder.ListFormat.ApplyBulletDefault();
builder.Writeln("Great performance");
builder.Writeln("High reliability");
builder.Writeln("Quality code and working");
builder.Writeln("Wide variety of features");
builder.Writeln("Easy to understand API");

// End the bulleted list.
builder.ListFormat.RemoveNumbers();

builder.Document.Save(MyDir + "Lists.ApplyDefaultBulletsAndNumbers Out.doc");
//ExEnd
}
反转皇潮 2018-10-16
  • 打赏
  • 举报
回复
引用 4 楼 apollokk 的回复:
大概是这样:
            Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

builder.ListFormat.ApplyNumberDefault();

builder.Writeln("Item 1");
builder.Writeln("Item 2");

builder.ListFormat.ListIndent();

builder.Writeln("Item 2.1");
builder.Writeln("Item 2.2");

builder.ListFormat.ListIndent();

builder.Writeln("Item 2.2.1");
builder.Writeln("Item 2.2.2");

builder.ListFormat.ListOutdent();

builder.Writeln("Item 2.3");

builder.ListFormat.ListOutdent();

builder.Writeln("Item 3");

builder.ListFormat.RemoveNumbers();

自己套上表格试下,直接在WORD里操作,设置Selection.Range.ListFormat是可以的


仿照你的例子出现的效果


代码
Aspose.Words.Document doc = new Aspose.Words.Document();
Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);
Aspose.Words.Tables.Table table = builder.StartTable();

builder.ListFormat.ApplyNumberDefault();
builder.InsertCell();
builder.Write("1");
builder.InsertCell();
builder.Write("文件名称");
builder.InsertCell();
builder.Write("规格");
builder.InsertCell();
builder.Write("签字");
builder.InsertCell();
builder.Write("备注");
builder.EndRow();//

builder.InsertCell();
builder.Write("1.1");
builder.InsertCell();
builder.Write("文件名称");
builder.InsertCell();
builder.Write("规格");
builder.InsertCell();
builder.Write("签字");
builder.InsertCell();
builder.Write("备注");
builder.EndRow();//

builder.InsertCell();
builder.Write("2.1");
builder.InsertCell();
builder.Write("文件名称");
builder.InsertCell();
builder.Write("规格");
builder.InsertCell();
builder.Write("签字");
builder.InsertCell();
builder.Write("备注");
builder.EndRow();//结束此行的标记

builder.EndTable();
builder.ListFormat.RemoveNumbers();//编号结束
doc.Save(@"F:\111.docx");

请教下 Selection.Range.ListFormat 怎么设置呀 我用 doc 或者table 或 builder 都点不出来

110,532

社区成员

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

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

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