我有一个Winforms应用程序,它利用dll(docX)从StringBuilder创建.docx文档。我尝试使用Microsoft Word(默认程序)单击按钮打开该文档。我尝试了下面的代码,但我一直在收到错误。有人能指出我正确的方向来实现这个目标吗?
private void button3_Click(object sender, EventArgs e)
{
var x = "";
using (DocX document = DocX.Create("Testdocx.docx"))
{
document.MarginTop = 25f;
document.MarginBottom = 25f;
document.MarginLeft = 25f;
document.MarginRight = 25f;
Paragraph p = document.InsertParagraph();
FontFamily fontFamily = new FontFamily("Courier New");
p.Append(sb.ToString()).Font(fontFamily).FontSize(8); //where "sb" is a StringBuilder
document.Save();
x = Environment.CurrentDirectory;
}
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"C:\Program Files (x86)\Microsoft Office\Office12\WINWORD.EXE";
startInfo.Arguments = x + "\\Testdocx.docx";
startInfo.UseShellExecute = true;
Process.Start(startInfo);
}
答案 0 :(得分:1)
您的方法会对WINWORD的路径进行硬编码。虽然这可能适用于您的情况,但它不灵活且易碎。
您只需执行
即可Process.Start(x + "\\Testdocx.docx");
这将找到.docx文件的默认文档处理程序(这是Winword,假设它已安装,并且您没有安装任何其他处理.docx文件的文件)。
答案 1 :(得分:1)
只需在代码中更改3行即可。你的问题将得到解决
这里...
using (DocX document = DocX.Create(Application.StartupPath + "\\Testdocx.docx"))
这里
document.Save();
x = Application.StartupPath;
。 在这里
startInfo.Arguments = "\"" + x + "\\Testdocx.docx\""; // -> Quotes on either sides
。 另外我认为你不需要为Word提供完整的路径。只是做
startInfo.FileName = "WINWORD.EXE";
甚至只是
startInfo.FileName = "WINWORD";
答案 2 :(得分:1)
传递的参数包括:应用程序,位置
Process.Start("winword.exe", "C:\\you path here \\filename.docx");