워드 내보내기를 통합해야 하는 프로젝트인데 제가 할 당시에는 온라인 문서 리소스가 많지 않고 상당히 지저분해서 확인하고 정리하고 기록을 작성하고 NPOI가 운영하는 Word의 기본 작업도 공유했습니다. 도움이 필요한 친구와 문서.
이 글에는 Word 생성을 위한 기본 작업인 Word 텍스트 생성 작업, 표 작업, 그림 작업이 포함되어 있습니다.
다음은 개인적인 이해에 불과합니다. 더 좋은 아이디어가 있으면 언제든지 추가해 주세요.
VS2017, 솔루션을 마우스 오른쪽 버튼으로 클릭하고 NuGet 패키지를 관리하고 프로젝트에 대한 NPOI 패키지를 검색 및 설치하고 인용합니다.
NPOI 사용 ·
1 템플릿 가져오기(XWPFDocument 문서)
먼저 템플릿을 사용하세요. 템플릿을 가져온 다음 편집을 위해 얻은 템플릿을 NPOI 문서 개체로 인스턴스화합니다.
using (FileStream stream = File.OpenRead("Template file address ”)){
XWPFDocument 문서 = 새로운 XWPFDocument(스트림)
//문서 처리, 코드 제어 편집 문서.
}
doc 처리 후 새 파일을 생성해서 doc에 쓰면 단어 생성이 완료됩니다.
FileStream file = new FileStream(생성된 파일 경로 + 파일 이름, FileMode.Create, FileAccess.Write);
doc.Write(file);
file.Close();
doc는 우리가 얻은 템플릿의 모든 내용입니다.
또 다른 점은 이 편집기에서 사용하는 템플릿은 모두 docx 접미사 파일이라는 점입니다. doc를 수정하면 docx를 읽을 때 오류가 보고되며, doxc 문서로 저장해야 합니다.
2. 텍스트 처리(XWPFParagraph para) doc.Paragraphs 문서의 모든 단락 개체를 가져옵니다.
para.ParagraphText 단락의 텍스트 데이터를 가져옵니다(교체할 텍스트, 대체 텍스트). 단락의 텍스트 교체(템플릿의 핵심)XWPFParagraph의 공식 참조 문서
3. 테이블 처리(XWPFTable 테이블)
doc.Tables 문서의 모든 테이블 개체를 가져옵니다. more here , doc.Tables는 중첩된 내부 테이블을 포함하지 않고 Word에서 가장 바깥쪽 테이블만 가져옵니다.
중첩된 셀을 얻으려면 cell.Tables를 사용할 수 있습니다.(1) 테이블 행 처리(XWPFTableRow 행)
row.Rows 테이블의 모든 행 가져오기
(2) 테이블 셀 처리(XWPFTableCell 셀)
테이블 행의 모든 셀 가져오기
셀을 가져온 후 셀에서 텍스트 단락(단락)을 가져와 텍스트를 바꿀 수 있습니다.
(3) 행 셀을 가로로 병합
CT_Tc cttcofRowThird = cell.GetCTTc(); CT_TcPr ctProfRowThird = cttcofRowThird.AddNewTcPr(); ctProfRowThird.gridSpan = new CT_DecimalNumber(); ctProfRowThird.gridSpan.val = num.ToString();//合并num列
row.GetTableICells() ;
List<XWPFTableRow> rows所有要合并的行的XWPFTableRow对象集合。 XWPFTableCell cellFirstofThird = 第一行要合并的单元格对象; CT_Tc cttcFirstofThird = cellFirstofThird.GetCTTc(); CT_TcPr ctPrFirstofThird = cttcFirstofThird.AddNewTcPr(); ctPrFirstofThird.AddNewVMerge().val = ST_Merge.restart;//开始合并行 ctPrFirstofThird.AddNewVAlign().val = ST_VerticalJc.center;//垂直 cttcFirstofThird.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center; for (int i = 1; i < rows.Count; i++) { XWPFTableCell cellfirstofRow = 第i行要合并的单元格对象; CT_Tc cttcfirstofRow = cellfirstofRow.GetCTTc(); CT_TcPr ctPrfirstofRow = cttcfirstofRow.AddNewTcPr(); ctPrfirstofRow.AddNewVMerge().val = ST_Merge.@continue;//继续合并行 ctPrfirstofRow.AddNewVAlign().val = ST_VerticalJc.center;//垂直 }4. 이미지 처리
NPOI 버전 2.3.0의 이미지 삽입에는 xml 파일의 수정 사항이 통합되지 않아서 손글씨로 컴파일해야 합니다(물론 복사했습니다) ).
using (FileStream fsImg = new FileStream(图片路径, FileMode.Open, FileAccess.Read, FileShare.None)) { var picID = doc.AddPictureData(fsImg, (int)NPOI.XWPF.UserModel.PictureType.JPEG); string picXml = "" + " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" + " <pic:nvPicPr>" + " <pic:cNvPr id=\"" + "0" + "\" name=\"Generated\"/>" + " <pic:cNvPicPr/>" + " </pic:nvPicPr>" + " <pic:blipFill>" + " <a:blip r:embed=\"" + id + "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>" + " <a:stretch>" + " <a:fillRect/>" + " </a:stretch>" + " </pic:blipFill>" + " <pic:spPr>" + " <a:xfrm>" + " <a:off x=\"0\" y=\"0\"/>" + " <a:ext cx=\"" + width + "\" cy=\"" + height + "\"/>" + " </a:xfrm>" + " <a:prstGeom prst=\"rect\">" + " <a:avLst/>" + " </a:prstGeom>" + " </pic:spPr>" + " </pic:pic>"; XWPFParagraph par = cell.AddParagraph();//创建段落对象(可以在doc加也可在cell加) par.Alignment = ParagraphAlignment.CENTER;//居中 XWPFRun run = par.CreateRun(); CT_Inline inline = run.GetCTR().AddNewDrawing().AddNewInline(); inline.graphic = new CT_GraphicalObject { graphicData = new CT_GraphicalObjectData { uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" } }; try { inline.graphic.graphicData.AddPicElement(picXml); } catch (XmlException xe) { throw xe; } NPOI.OpenXmlFormats.Dml.WordProcessing.CT_PositiveSize2D extent = inline.AddNewExtent(); extent.cx = width; extent.cy = height; NPOI.OpenXmlFormats.Dml.WordProcessing.CT_NonVisualDrawingProps docPr = inline.AddNewDocPr(); docPr.id = 1; docPr.name = "Image" + id; }오늘은 여기까지 하고 나중에 더 나오면 추가하겠습니다.
관련 권장 사항:
C/C++를 사용하여 PHP 확장 작성
위 내용은 C#은 NPOI를 사용하여 Word 문서를 생성합니다(템플릿에 따라).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!