我正在创建一个可以处理输入excel文件并将它们保存为新文件的应用程序,之后需要将它们转换为pdf。最后,它们附在电子邮件中并被发送出去。我遇到的问题是pdf没有正确转换。我最终得到2页,每页包含页面的垂直部分,以及页面的两倍长。
这是预览:
我想要的更像是这样:
我使用在线转换器来获取此图像。
最后,这是我用来导入布局文件,编辑文件数据,保存然后将其导出为pdf的代码。
Application oExcel = new Application();
Workbook oBook = oExcel.Workbooks.Open(string.Format("{0}\\ATH-ICT\\Waspbane Bestellingen\\Resources\\Layout.xlsx", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)));
Worksheet oSheet = (Worksheet)oBook.Worksheets[1];
oSheet.Range["D3"].Value = customer.Name;
oSheet.Range["D4"].Value = customer.Address;
oSheet.Range["D5"].Value = string.Format("{0} {1}", customer.Postal, customer.City);
oSheet.Range["J3"].Value = DateTime.Now.Year + orderid.ToString("D4");
oSheet.Range["J5"].Value = DateTime.Now.ToString("dd/MM/yyyy");
int productNumber = 11;
foreach (Order order in customer.Orders)
{
oSheet.Range["B" + productNumber].Value = order.Amount;
oSheet.Range["D" + productNumber].Value = "st";
oSheet.Range["E" + productNumber].Value = order.Product.Name;
oSheet.Range["I" + productNumber].Formula = string.Format("={0}/{1}", order.Product.Price, 1.21);
oSheet.Range["J" + productNumber].Formula = "=PRODUCT(B11,I11)";
oSheet.Range["K" + productNumber].Value = 1;
productNumber += 2;
}
oSheet.Range["J36"].Value = shipping;
oSheet.Range["A43"].Value = string.Format("Betaald met {0}", method);
oBook.SaveAs(string.Format("{0}\\Factuur {1}{2:D4}.xlsx", savelocation, DateTime.Now.Year, orderid));
oBook.Close();
oBook = null;
oExcel.Quit();
oExcel = null;
oExcel = new Application();
oBook = oExcel.Workbooks.Open(string.Format("{0}\\Factuur {1}{2:D4}.xlsx", savelocation, DateTime.Now.Year, orderid));
oSheet = (Worksheet)oExcel.Worksheets[1];
oSheet.PageSetup.FitToPagesWide = 1;
oSheet.PageSetup.FitToPagesTall = 1;
oSheet.PageSetup.Zoom = false;
oBook.ExportAsFixedFormat(
XlFixedFormatType.xlTypePDF,
string.Format("{0}\\Factuur {1}{2:D4}.pdf", savelocation, DateTime.Now.Year, orderid),
XlFixedFormatQuality.xlQualityStandard, true, false, Type.Missing, Type.Missing, false
);
oBook.Close();
oBook = null;
oExcel.Quit();
oExcel = null;
Marshal.ReleaseComObject(oSheet);
GC.Collect();
GC.WaitForPendingFinalizers();
在脚本结束时,我还有一些关于垃圾收集器和编组的行,试图在任务管理器中摆脱遗留进程,但它似乎没有工作。
此外,此代码不是最有效的。我只想要基本的工作。
编辑:
如果您想使用相同的excel文件重现我的示例,我现在在下面提供了一个下载链接到我使用的确切excel文件:
https://drive.google.com/open?id=0B6hUijkN5GM3QmZ3YkdNd1l0ejg
答案 0 :(得分:0)
不幸的是,我没有按照你通常使用Excel Interop的方式工作,但我找到了一个很好的选择。
我使用Spire.XLS让它运转起来。这是一项免费服务(每张excel表最多5张和150行),可以完成所有工作,甚至可以用于Excel Interop。
http://www.e-iceblue.com/Introduce/excel-for-net-introduce.html