看到很多人问如何替换书签内容,假如一个模板页,里面的表格是空的 而你需要把数据库中的内容导入进去 该怎么实现。那就是设置书签,替换的内容
比如以上是一个模板页,而我需要导进去数据库内容,
第一步:给需要导入数据的位置添加书签,鼠标点击那个位置 然后插入书签,起个名字,这个很重要
第二步:依次导入书签之后,记录一下书签名字 后面代码需要用上.
第三步:调用API搭建好,后续补充上代码
//数据库对应的model类库ProjectWorkModel 各自各自的方法 这是我自己的方法
public virtual void Export(ProjectWorkModel req, Stream stream, ref string fileName)
{
//必不可少的Dictionary 需要存书签数据
Dictionary<string, string> dic = new Dictionary<string, string>();
//赋id值 查出数据库的内容 用自己的方法也可行
var aoData = DbContext.From<ProjectWork>().Select().Single();
//给书签赋类型
string filename = string.Empty;
string pwname = string.Empty;
string scale = string.Empty;
string type = string.Empty;
string licence = string.Empty;
string per = string.Empty;
string workunit = string.Empty;
string pm = string.Empty;
string plan = string.Empty;
string time = string.Empty;
string inform = string.Empty;
if (aoData != null)
{
//前面为创建书签的名字
//后面aoData的是数据库数据信息
fileName = aoData.PwName;
filename = aoData.PwName;
pwname = aoData.PwName;
scale = aoData.PwScale;
type = aoData.PwType;
licence = aoData.PwLicence;
per = aoData.PwPPer;
workunit = aoData.PwWorkUnit;
pm = aoData.PwPm;
plan = aoData.PwPlan;
time = Convert.ToString(aoData.PwInspectTime);
inform = aoData.PwInspectInform;
}
//把书签数据都添加进去dic
dic.Add("fileName", fileName);
dic.Add("filename", filename);
dic.Add("pwname", pwname);
dic.Add("scale", scale);
dic.Add("type", type);
dic.Add("licence", licence);
dic.Add("per", per);
dic.Add("workunit", workunit);
dic.Add("pm", pm);
dic.Add("plan", plan);
dic.Add("time", time);
dic.Add("inform", inform);
//返回方法 ReportYjForm是一个方法 接着看方法
var result = ReportYjForm(dic, stream);
上面这个步骤主要是把书签名字和数据库数据存到dic里面
调用方法
public bool ReportYjForm(Dictionary<string, string> dic, Stream stream)
{
bool isOk = false;
try
{
//添加书签模板的位置
string rote = @"C:\Users\DN\Desktop\word\";
//模板的名字
string orginPath = rote + "1111.docx";
//需要添加nuget包 Aspose.Words
Document doc = new Document(orginPath);
DocumentBuilder builder = new DocumentBuilder(doc);
//循环dic的数据
foreach (var item in dic.Keys)
{
//移除书签,指的是把你自己设置的书签移走,然后在这个位置写上数据
builder.MoveToBookmark(item);
//书签移除后 添加上数据的数据
builder.Write(dic[item] ?? "");
}
//保存一下
doc.Save(stream, SaveFormat.Doc);
}
catch (Exception)
{
throw;
}
return isOk;
}
不明白的教你们一个方法,就是学会打断点,进入断点之后看数据 就会明白了
最后API接口的调用
[HttpPost]
public IActionResult ExportWord2([FromQuery] ProjectWordModel req)
{
using (var ms = new System.IO.MemoryStream())
{//有标题的写标题
string fileName = string.Empty;//调用方法
Servicee.Export2(req, ms, ref fileName);//接口实现成功后记得输入id值 然后下载这个导出的文档 一下是导出文档的格式
return File(ms.ToArray(), "application/msword", string.Format("{0}({1}).doc", fileName, DateTime.Now.ToString("yyyy-MM-dd")));
}
}
因为大部分人写法不一样,个人觉得如果了解过的话,主要掌握一个东西,就是书签写好,存入dic之后,dic里面基本都是书签和数据库数据是对应的,所以后面方法里有移除书签,写入数据库数据 。希望有人能会有收获,当然如果我叙述的不清楚 我以后继续努力