C#(MVC) Word 替换,填充表格,导出并下载PDF文档

近期做一个关于C# 操作 Word 模板 文档的功能模块,查阅资料,最终完美完成任务,记录下来,以便后面还会用到。

aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />

第一部分:为了防止动态数据,撑开样式,所以采用的是,无边框的word表格(表格属性-》边框和底纹-》边框(无))即可,A只是表示表格那儿有个单元格而已。

第二部分:用占位符,到时候用真实的数据来替换。

第三部分:产品项为动态生成。

下面看具体代码实现:

using Microsoft.Office.Interop.Word;

using WinForm = System.Windows.Forms;

public class XXController : BaseController
{ public ActionResult Print()
{
// pdf 路径
string PdfPath = AppDomain.CurrentDomain.BaseDirectory + "PurcharseContract.pdf"; // word模板地址
string WordTemplatePath = AppDomain.CurrentDomain.BaseDirectory + @"App_Data\PurcharseContract.docx"; // 定义WORD Application相关
Application appWord = new Application
{
// WORD程序不可见
Visible = false, // 不弹出警告框
DisplayAlerts = WdAlertLevel.wdAlertsNone
}; lock (LockObj)
{
// 打开word模板文件
Document doc = appWord.Documents.Open(WordTemplatePath, OMissing, false); try
{ Table table = doc.Tables[]; // 第1行
table.Cell(, ).Range.Text = "名称";
table.Cell(, ).Range.Text = "编号"; // 第2行
table.Cell(, ).Range.Text = "编码";
table.Cell(, ).Range.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // 准备需替换的数据
Dictionary<string, string> datas = new Dictionary<string, string>();
datas.Add("{PurchaseTotalMoney}", "");
datas.Add("{TotalMoneyChCapital}", GetChineseNum((decimal))); // 替换占位符
foreach (var data in datas)
{
SearchReplace(appWord, data.Key, data.Value);
} // 2.填充产品项数据
// 获取word文档里面的表格
Table table = doc.Tables[]; // 第二行产品模板,插入产品项 行
const int RowIdx = ;
foreach (var product in products.GroupBy(x => x.Name))
{
// 始终在第二行产品模板前插入新行
object beforeRow = table.Rows[];
table.Rows.Add(ref beforeRow); foreach (var item in product)
{
string info = "产品编码:ProductCode" + "\r产品名称:ProductName" + "\r规格型号:No";
string info2 = "单位:Unit" + "\r币别:RMB" + "\r品牌:AN";
string info3 = "单价:2" + "\r数量:2" + "\r金额:4"; table.Cell(RowIdx, ).Range.Text = info;
table.Cell(RowIdx, ).Range.Text = info2;
table.Cell(RowIdx, ).Range.Text = info3;
table.Cell(RowIdx, ).Range.Text = DateTime.Now.ToString("yyyy-MM-dd");
table.Cell(RowIdx, ).Range.Text = "";
table.Cell(RowIdx, ).Range.Text = "";
table.Cell(RowIdx, ).Range.Text = "2.0";
table.Cell(RowIdx, ).Range.Text = "备注";
}
} int count = table.Rows.Count; // 删除位于表格倒数第4行的产品模板项
table.Rows[count - ].Delete(); double money = 200.00; // 运费
table.Cell(count - , ).Range.Text = (money * 0.02).ToString("F2"); // 汇总
table.Cell(count - , ).Range.Text = money.ToString("F2"); // 总金额(大写)
table.Cell(count - , ).Range.Text = GetChineseNum((decimal)money); // 3. 弹出 Windows 打印机选择项
WinForm.PrintDialog pd = new WinForm.PrintDialog();
if (pd.ShowDialog() != WinForm.DialogResult.Cancel)
{
// 设置选择的打印机名称
appWord.ActivePrinter = pd.PrinterSettings.PrinterName;
} // true后台打印,false前台打印。
// 必须false,否则后台打印时,尚未打印,就调用了后续的Close,造成打印任务无法执行
object printbackgroud = false; // 4. 开始打印
doc.PrintOut(ref printbackgroud); // 5. 保存为PDF文档
doc.ExportAsFixedFormat(PdfPath, WdExportFormat.wdExportFormatPDF);
}
catch (Exception ex)
{
//throw ex;
}
finally
{
// 关闭Word
if (doc != null)
{
doc.Close(ref SaveOption);
} // 退出word
appWord.Quit(ref SaveOption);
}
} FileStream fs = new FileStream(PdfPath, FileMode.Open); // 6. 返回致客服端提供下载
return File(fs, "application/octet-stream", "Test.pdf");
} }

替换占位符字符串:

/// <summary>
/// 查找并替换文本
/// </summary>
/// <param name="app">word application</param>
/// <param name="strOldText">旧字符</param>
/// <param name="strNewText">新字符</param>
/// <returns>处理结果</returns>
public static bool SearchReplace(Application app, string strOldText, string strNewText)
{
object replaceAll = WdReplace.wdReplaceAll;
object missing = Type.Missing; // 首先清除任何现有的格式设置选项,然后设置搜索字符串 strOldText。
app.Selection.Find.ClearFormatting();
app.Selection.Find.Text = strOldText; app.Selection.Find.Replacement.ClearFormatting();
app.Selection.Find.Replacement.Text = strNewText; bool result = app.Selection.Find.Execute(
ref missing,
ref missing,
ref missing,
ref missing,
ref missing,
ref missing,
ref missing,
ref missing,
ref missing,
ref missing,
ref replaceAll,
ref missing,
ref missing,
ref missing,
ref missing); return result;
}

附属功能,金额转中文大写:

/// <summary>
/// 金额小写转大写
/// </summary>
/// <param name="value">金额</param>
/// <returns>中文大写</returns>
public static string GetChineseNum(decimal value)
{
const string Chinese = "零壹贰叁肆伍陆柒捌玖";
const string Unit = "元十百千万十百千亿十百千兆十百千";
const string Unit2 = "角分"; StringBuilder builder = new StringBuilder();
long u = ;
int i = ; // 整数
while (value >= u)
{
int n = (int)((long)value / u % );
u *= ;
if (n == )
{
i++;
continue;
}
if (i > && i < )
{
builder.Insert(, "元");
}
else if (i > && i < )
{
builder.Insert(, "万");
}
else if (i > )
{
builder.Insert(, "亿");
}
builder.Insert(, Unit[i++]);
builder.Insert(, Chinese[n]);
} // 小数
if ((long)value != value)
{
long value2 = (long)((value - (long)value) * );
int n = (int)(value2 / % );
builder.Append(Chinese[n]);
builder.Append(Unit2[]);
n = (int)(value2 % );
builder.Append(Chinese[n]);
builder.Append(Unit2[]);
}
else
{
builder.Append("整");
} return builder.ToString();
}

参考博客:http://www.jb51.net/article/37615.htm

学无止境,共勉!!!

上一篇:.NET开源项目常用记录


下一篇:java:CSS(定位,组合选择符,边距,Float,Table的样式,显示和隐藏,换行,盒子模型,iframe和frameset框架)