使用aspose.Words更新表格列宽

2023-12-27 14:47:27

public?static?bool?UpdateTableStyle(string?filePath)

????????{

????????????try

????????????{

????????????????Document doc = new?Document();

????????????????//样式

????????????????Style style = doc.Styles.Add(StyleType.Paragraph, "cellStyle");

????????????????style.Font.Name = "simsun";

????????????????PageSetup pageSet = doc.Sections[0].PageSetup;

????????????????pageSet.PaperSize = PaperSize.A4;

????????????????pageSet.LeftMargin = ConvertUtil.MillimeterToPoint(5);

????????????????pageSet.RightMargin = ConvertUtil.MillimeterToPoint(5);

????????????????//pageSet.PageStartingNumber = 1;

????????????????//pageSet.PageNumberStyle = NumberStyle.Arabic;

????????????????DocumentBuilder builder = new?DocumentBuilder(doc);

????????????????builder.MoveToHeaderFooter(HeaderFooterType.FooterPrimary);

????????????????builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;

????????????????//builder.InsertField("PAGE", "");

????????????????//builder.Write("/");

????????????????//builder.InsertField("NUMPAGES", "");

????????????????double?cellWidth = 18;

????????????????double?portraitMinWidth = ConvertUtil.MillimeterToPoint(cellWidth);//纵向最小列宽

????????????????double?pageWidth = 200d;//A4纵向可编辑区域宽度200毫米//A4横向向可编辑区域宽度290毫米

????????????????List<Document> docItemList = new?List<Document>();

????????????????bool?IsLandscape = false;//是否为横向

????????????????//先计算是使用横向还是纵向的A4

????????????????if?(File.Exists(filePath))

????????????????{

????????????????????Document docItem = new?Document(filePath);

????????????????????docItemList.Add(docItem);

????????????????????var?tableList = docItem.GetChildNodes(NodeType.Table, true);

????????????????????bool?isExist = false;

????????????????????foreach?(Table table in?tableList)

????????????????????{

????????????????????????if(table.Range != null?&& table.Range.Bookmarks != null)

????????????????????????{

????????????????????????????foreach?(Bookmark bkName in?table.Range.Bookmarks)

????????????????????????????{

????????????????????????????????if?(bkName.Name == aa)

????????????????????????????????{

????????????????????????????????????isExist = true;

????????????????????????????????????break;

????????????????????????????????}

????????????????????????????}

????????????????????????}

????????????????????????if?(isExist)

????????????????????????{

????????????????????????????//先计算是否符合纵向A4纸要求的列宽

????????????????????????????double?width = ConvertUtil.MillimeterToPoint(200d / table.Rows[2].Cells.Count);

????????????????????????????if?(width < portraitMinWidth)

????????????????????????????{

????????????????????????????????portraitMinWidth = width;

????????????????????????????}

????????????????????????}

????????????????????}

????????????????????//不包含指标书签时,退出

????????????????????if?(!isExist)

????????????????????????return?false;

????????????????}

????????????????//如果列宽小于一定宽度那么就将文档变为横向cellWidth

????????????????if?(portraitMinWidth < ConvertUtil.MillimeterToPoint(cellWidth))

????????????????{

????????????????????IsLandscape = true;

????????????????????pageWidth = 150d;

????????????????}

????????????????else

????????????????{

????????????????????IsLandscape = false;

????????????????????pageWidth = 120d;

????????????????}

????????????????int?i = 1;

????????????????foreach?(Document docItem in?docItemList)

????????????????{

????????????????????builder.MoveToDocumentEnd();

????????????????????// Document docItem = new Document(path);

????????????????????PageSetup pageSet1 = docItem.Sections[0].PageSetup;

????????????????????pageSet1.PaperSize = PaperSize.A4;

????????????????????pageSet1.LeftMargin = ConvertUtil.MillimeterToPoint(20);

????????????????????pageSet1.RightMargin = ConvertUtil.MillimeterToPoint(20);

????????????????????var?tableList = docItem.GetChildNodes(NodeType.Table, true);

????????????????????foreach?(Table table in?tableList)

????????????????????{

????????????????????????table.AutoFit(AutoFitBehavior.FixedColumnWidths);

????????????????????????foreach?(Row row in?table.Rows)

????????????????????????{

????????????????????????????if?(table.Range != null?&& table.Range.Bookmarks != null)

????????????????????????????{

????????????????????????????????foreach?(Bookmark bkName in?table.Range.Bookmarks)

????????????????????????????????{

????????????????????????????????????if?(bkName.Name == aa)

????????????????????????????????????{

????????????????????????????????????????for?(int?j = 0; j < row.Cells.Count; j++)

????????????????????????????????????????{

????????????????????????????????????????????row.Cells[j].CellFormat.WrapText = true;

????????????????????????????????????????????double?width = ConvertUtil.MillimeterToPoint((pageWidth) / row.Cells.Count);

????????????????????????????????????????????row.Cells[j].CellFormat.Width = width;

????????????????????????????????????????}

????????????????????????????????????????break;

????????????????????????????????????}

????????????????????????????????}

????????????????????????????}

????????????????????????}

????????????????????}

????????????????????docItem.FirstSection.HeadersFooters.LinkToPrevious(true);

????????????????????builder.InsertDocument(docItem, ImportFormatMode.UseDestinationStyles);

????????????????????i++;

????????????????}

????????????????if?(IsLandscape)

????????????????{

????????????????????//文档变为横向

????????????????????pageSet.Orientation = Aspose.Words.Orientation.Landscape;

????????????????}

????????????????//重新整理页面布局

????????????????doc.UpdatePageLayout();

????????????????doc.Save(filePath);

????????????????return?true;

????????????}

????????????catch?(Exception ex)

????????????{

????????????????LogHelper.WriteLog("更新表格列宽异常,", ex);

????????????????return?false;

????????????}

????????}

文章来源:https://blog.csdn.net/thanks_hck/article/details/135236552
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。