我正在尝试在interop excel文件中添加分页符,但还无法做到。有时什么也没有发生,有时我会收到异常消息“无法设置Range类的PageBreak属性”。
这是模板文件。
我是Interop Excel的新手。我正在使用Excel文件作为PageBreakPreview中的模板。当我在新行中插入数据时,我想在该行之后转移分页符。 我已经看到许多建议的答案,但无法完成。
这是我尝试过的一些代码(已注释)。
object misValue = System.Reflection.Missing.Value;
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = null;
Excel.Worksheet worksheet = null;
try
{
xlWorkBook = xlApp.Workbooks.Open(Server.MapPath("~//Templates//ExcelTemplate.xlsx")
, 0, true, misValue, misValue, misValue, misValue, Excel.XlPlatform.xlWindows, misValue, misValue, true, misValue, misValue, misValue, misValue);
worksheet = (Excel.Worksheet)xlWorkBook.Worksheets[1];
worksheet.Activate();
worksheet.Cells[6, 1] = "Item1";
worksheet.Cells[6, 1].Font.Bold = true;
worksheet.Cells[7, 1] = "content";
//worksheet.HPageBreaks.Add(sheet.Range["A7"]);
//worksheet.HPageBreaks.Add(sheet.Range["A13"]);
//xlWorkBook.Worksheets[0].ViewMode = ViewMode.Preview;
//worksheet.Rows[5].PageBreak = xlPageBreakManual;
//xlApp.ActiveWindow.View = Excel.XlWindowView.xlNormalView;
//worksheet.Cells.PageBreak = (int)Excel.XlPageBreak.xlPageBreakNone;
//worksheet.Rows[4].PageBreak = Excel.XlPageBreak.xlPageBreakNone;
//worksheet.Rows[8].PageBreak = Excel.XlPageBreak.xlPageBreakManual;
//worksheet.ResetAllPageBreaks();
//worksheet.HPageBreaks[1].Location = worksheet.Range["A8"];
xlWorkBook.SaveAs(Server.MapPath("~//TempFiles//ExcelFile_Copy.xlsx"));
}
catch (Exception ex)
{
//ex
}
finally
{
xlWorkBook.Close(0);
xlApp.Quit();
Marshal.ReleaseComObject(worksheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(xlApp);
}
添加新数据时,分页符应到达下一行的末尾。
非常感谢您的帮助。
答案 0 :(得分:0)
将Excel工作表拆分为多个页面,并将视图模式设置为分页预览。
workbook.Worksheets[0].HPageBreaks.Add(sheet.Range["A7"]);
workbook.Worksheets[0].HPageBreaks.Add(sheet.Range["A13"]);
workbook.Worksheets[0].ViewMode = ViewMode.Preview;
ps:A7和A13是休息点
已编辑
通过调用HPageBreaks.RemoveAt()方法删除指定的水平分页符。
workbook.Worksheets.HPageBreaks.RemoveAt(7);
答案 1 :(得分:0)
我发现工作表上的发白区域实际上是打印区域,因此我刚刚更新了xlWorkBook.Worksheets[1].PageSetup.PrintArea
并分配了新的打印区域值,以将PageBreak移动到第7行下,这是我认为是自动分页。如果我错了,任何人都可以纠正我。
这是我解决问题的方法:
xlWorkBook.Worksheets[1].PageSetup.PrintArea = "$A$1:$H$20";