您当前的位置: 首页 >  寒冰屋 c#

c# docx格式word文档导入

寒冰屋 发布时间:2019-10-18 15:47:34 ,浏览量:4

在我们的项目中,大多的时候,我们都是进行的excel的导入和导出工作。而对于word的导入和导出操作,就比较少了。今天,我们以简历的导入为例子,简要说明下获取word内容进行导入的方法,简历的模板如下。

根据模板,我们可以看到此文档内容分为几个明显的块。“基本信息”之上的内容可以看成是一个表格,只是没有边界显示出来而已。而其之下是一个可见边界的表格,之后的内容都基本是已这种方式展示的。

核心代码如下

DirectoryInfo dir = new DirectoryInfo(selectedPath);  //selectedPath是docx文件夹路径

var pathTemp = string.Empty;
var fileName = string.Empty;
                       
var lstData = new List();
foreach (FileInfo fi in dir.GetFiles("*.docx"))
{
    g_doc = fi.FullName;
    using (WordprocessingDocument doc = WordprocessingDocument.Open(fi.FullName, false))
    {
        List tbls = doc.MainDocumentPart.Document.Body.Elements
().ToList(); Model rs = new Model(); rs.StudentName = tbls[1].Elements().ToArray()[3].Elements().ToArray()[2].Elements().First().InnerText; var birth = tbls[2].Elements().ToArray()[0].Elements().ToArray()[3].Elements().First().InnerText; if (!string.IsNullOrEmpty(birth)) { rs.Birthday = DateTime.Parse(birth); } rs.Gender = tbls[2].Elements().ToArray()[0].Elements().ToArray()[1].Elements().First().InnerText; rs.IdCard = tbls[2].Elements().ToArray()[1].Elements().ToArray()[1].Elements().First().InnerText; rs.InterviewCity = tbls[2].Elements().ToArray()[2].Elements().ToArray()[1].Elements().First().InnerText; rs.Email = tbls[2].Elements().ToArray()[3].Elements().ToArray()[1].Elements().First().InnerText; rs.Mobile = tbls[2].Elements().ToArray()[3].Elements().ToArray()[3].Elements().First().InnerText; rs.Address = tbls[2].Elements().ToArray()[4].Elements().ToArray()[1].Elements().First().InnerText; rs.Degree = tbls[3].Elements().ToArray()[0].Elements().ToArray()[1].Elements().First().InnerText; var year = tbls[3].Elements().ToArray()[0].Elements().ToArray()[3].Elements().First().InnerText; if (!string.IsNullOrEmpty(year)) { rs.EndYear = DateTime.Parse(year).Year; } rs.School = tbls[3].Elements().ToArray()[1].Elements().ToArray()[1].Elements().First().InnerText; rs.SectionAndDepartment = tbls[3].Elements().ToArray()[2].Elements().ToArray()[1].Elements().First().InnerText; rs.Major = tbls[3].Elements().ToArray()[2].Elements().ToArray()[3].Elements().First().InnerText; rs.SchoolLow = tbls[3].Elements().ToArray()[3].Elements().ToArray()[3].Elements().First().InnerText; rs.IsFlag = tbls[3].Elements().ToArray()[5].Elements().ToArray()[1].Elements().First().InnerText == "是" ? 1 : 0; var titleContent = tbls[5].Elements().ToArray()[0].Elements().ToArray()[0].Elements().First().InnerText; rs.KeyWord = tbls[tbls.Count - 2].Elements().ToArray()[1].Elements().ToArray()[1].Elements().First().InnerText; lstData.Add(rs); } }

由代码可以看出,我们要得到学上的姓名这一内容,其在最顶部“无边界”中出现。而如果代码中给出的是tbls[1].Elements(),由此可见这里的索引不是从0开始的。而从完整的代码tbls[1].Elements().ToArray()[3].Elements().ToArray()[2].Elements().First().InnerText;中可看出,从“个人编号”开始,“姓名”是在第四个位置,而给出的索引是3,所以这个地方的索引是从0开始计算的。而接下来直接获得内容部分的索引也是从0开始计算的。如果从这个地方看不出,可以参考下面的性别等内容的获取方式进行对比即可知道。

其中的Model为导入的模型类,基本和导入表的字段内容一致,实际使用中需要根据需要进行调整。

这里有一个比较有意思的地方是“学生实践经验”,这里我们想把多个实践的时间和内容拼接到一起,所以给出了以下demo。

private string GetProject(List
tbls, int idx) { StringBuilder sb = new StringBuilder(); var rows = tbls[idx].Elements().ToArray(); var k = rows.Length; for (int i = 0; i < k / 2; i++) { var cells = rows[i * 2].Elements().ToArray(); string bdat = cells[1].Elements().First().InnerText; string edat = cells[3].Elements().First().InnerText; var cells2 = rows[i * 2 + 1].Elements().ToArray(); string content = cells2[1].Elements().First().InnerText; sb.AppendLine(string.Format("{0}~{1}", bdat, edat)); sb.AppendLine(string.Format("{0}", content)); } return sb.ToString(); }

其中,第二个参数idx表示“学生实践经验”在整个word文档中的索引值。

以上内容仅仅给出了word导入的一个基本思路,关于数据库相关的操作,这里就不多说啦。大家可以根据自己使用的数据库进行相应代码编写即可。

 

关注
打赏
查看更多评论