报表模板
C#读取报表模板,采用NOPI方式搜索模板段落并完成替换,最终生成报表并存放在指定路径下
C# .代码如下在这里插入代码片
namespace ReportGeneration
{
public class ReportGenerationNPOI
{
///
/// 报表生成
///
///
/// 实体数据
/// 产品信息
/// 报表搜素的产品信息
/// 报表搜素的测试项信息
/// 报表搜素的测试项结果信息
/// 测试项结果信息
/// 所有测试结果
/// 报表搜素的EDM7所有测试结果段
/// 报表保存路径
/// 报表模板路径
public void NormalCreateMachineDoc(string[] MachineProductInfoValue, string[] MachineSearchProductsinfo, string[] MachineTestValue, string[] MachineSearchTestitem, string[] MachineTestValueresult, string[] MachineSearchTestValueresult, string AllTestResultValue, string AllTestResultSeach, string ReportGenerationPath, string docTemplatePath)
{
List MachineTesProductInfoValue = new List();
for (int i = 0; i < MachineProductInfoValue.Length; i++)
{
MachineTesProductInfoValue.Add(MachineProductInfoValue[i]);
}
List<string> MachineTestItemeValue = new List<string>();
for (int i = 0; i < MachineTestValue.Length; i++)
{
MachineTestItemeValue.Add(MachineTestValue[i]);
}
List<string> MachineSearchProductsInfo = new List<string>();
for (int i = 0; i < MachineSearchProductsinfo.Length; i++)
{
MachineSearchProductsInfo.Add(MachineSearchProductsinfo[i]);
}
List<string> MachineSearchTestIteme = new List<string>();
for (int i = 0; i < MachineSearchTestitem.Length; i++)
{
MachineSearchTestIteme.Add(MachineSearchTestitem[i]);
}
List<string> MachineTestValueResult = new List<string>();
for (int i = 0; i < MachineTestValueresult.Length; i++)
{
MachineTestValueResult.Add(MachineTestValueresult[i]);
}
List<string> MachineSearchTestValueResult = new List<string>();
for (int i = 0; i < MachineSearchTestValueresult.Length; i++)
{
MachineSearchTestValueResult.Add(MachineSearchTestValueresult[i]);
}
if (File.Exists(docTemplatePath))
{
string newTempleteFileName = MachineProductInfoValue[0] + ".docx";
if (!Directory.Exists(ReportGenerationPath))
{
Directory.CreateDirectory(ReportGenerationPath);
}
string newTempleteFullPath = ReportGenerationPath + newTempleteFileName;
// File.Copy(docTemplatePath, newTempleteFullPath);//拷贝doc模板
//读取Word模板
FileStream fileStream = new FileStream(docTemplatePath, FileMode.Open, FileAccess.ReadWrite);
XWPFDocument myDoc = new XWPFDocument(fileStream);
// 遍历段落,替换内容
foreach (var para in myDoc.Paragraphs)
{
ReplaceKey(DateTime.Now.ToString("yyyy-MM-dd HH:mm"), "GenerationTime", para);
}
//遍历table,替换单元格内容
foreach (var row in myDoc.Tables[0].Rows)
{
foreach (var cell in row.GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
for (int i = 0; i < MachineSearchProductsInfo.Count(); i++)
{
ReplaceKey(MachineTesProductInfoValue[i], MachineSearchProductsInfo[i], para);
}
}
}
}
foreach (var row in myDoc.Tables[1].Rows)
{
foreach (var cell in row.GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
for (int i = 0; i < MachineSearchTestIteme.Count; i++)
{
ReplaceKey(MachineTestItemeValue[i], MachineSearchTestIteme[i], para);
}
for (int i = 0; i < MachineSearchTestValueResult.Count; i++)
{
ReplaceKey(MachineTestValueResult[i], MachineSearchTestValueResult[i], para);
}
}
}
}
foreach (var para in myDoc.Paragraphs)
{
ReplaceKey(AllTestResultValue, AllTestResultSeach, para);
}
FileStream fs = new FileStream(newTempleteFullPath, FileMode.Create);
myDoc.Write(fs);
fs.Close();
}
}
/// <summary>
/// word模板内容替换
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="etity">实体数据</param>
/// <param name="para">段落</param>
private static void ReplaceKey(string value, string SearchValue, XWPFParagraph para)
{
var runs = para.Runs;
string text = "";
foreach (var run in runs)
{
string propteryName = SearchValue;//Word模板中设定的需要替换的标签
text = run.ToString();
if (text.Contains(propteryName))
{
text = text.Replace(propteryName, value.ToString());
}
run.SetText(text);//替换标签文本(重要)
}
}
}
Labview调用ReportGenerationNPOI.dll生成报表
最终生成的报表如下