Я использую библиотеку Microsoft.office.interop.word для формирования отчета в .docx. Создаю Range. Добавляю данные на документ, но при создании таблицы необходимо указать диапазон, когда я указываю мой Range, то эта таблица закрывает весь документ.
public ActionResult ReportTEST(int IDF)
{
//Получаем дату остатков
DateTime? lastDat;
OstatSklad ostDat = new OstatSklad();
List<OstatSklad> ListOstat = new List<OstatSklad>();
ListOstat = db.OstatSklad.Where(h => h.Sklad.Organization.IdOrg == IDF).OrderByDescending(u => u.Date).ToList();
if (ListOstat != null)
{
ostDat = ListOstat.FirstOrDefault();
}
else
{
ostDat = null;
}
lastDat = ostDat.Date;
//Получаем название филиала для отчета
Organization or = new Organization();
or = db.Organization.FirstOrDefault(f => f.IdOrg == IDF);
//Получаем пользователя для отчета (руководитель)
Users us = new Users();
us = db.Users.FirstOrDefault(g => g.idFil == IDF & g.idDolj == 1);
//Получаем пользователя для отчета (МОЛ)
Users us1 = new Users();
us1 = db.Users.FirstOrDefault(g => g.idFil == IDF & g.idDolj == 5);
Application app = new Application();
Document doc = app.Documents.Add(Visible: true);
Range r = doc.Range(0, 0);
Range r1 = doc.Range(1, 1);
r.Font.Size = 14;
r.Font.Name = "Times New Roman";
Table t = doc.Tables.Add(r, 1, 2);
t.Borders.Enable = 0;
foreach (Row row in t.Rows)
{
foreach (Cell cell in row.Cells)
if (cell.ColumnIndex == 1)
{
if (or == null)
{
cell.Range.Text = "ОАО \n";
}
else
{
cell.Range.Text = "ОАО \n" + "филиал " + or.Name;
}
}
else
{
if (us == null)
{
cell.Range.Text = "Начальнику филиала";
}
else
{
cell.Range.Text = "Начальнику филиала " + or.Name + "\n" + us.LastName + " " + us.FirstName.Substring(0, 1) + "." + us.MidleName.Substring(0, 1) + ".";
}
}
}
r.InsertAfter("\n");
r.InsertAfter("ДОКЛАДНАЯ ЗАПИСКА\n");
r.InsertAfter("№___________ от ___________\n");
r.InsertAfter("г.\n");
r.InsertAfter("");
if (ListOstat.Count == 0)
{
r.InsertAfter("Остатки нефтепродуктов на дату ");
}
else
{
r.InsertAfter("Остатки нефтепродуктов на дату " + ListOstat.FirstOrDefault().Date);
}
r.InsertAfter("\n");
List<OstatSklad> ListOstatDat = new List<OstatSklad>();
ListOstatDat = ListOstat.Where(g => g.Date == lastDat).ToList();
//Заполняем таблицу с остатками!!!!!!!
Table tOst = doc.Tables.Add(r, ListOstatDat.Count + 1, 2);
foreach (Row rw in tOst.Rows)
{
foreach (Cell cell in rw.Cells)
if (cell.RowIndex == 1)
{
cell.Range.Text = "Вид нефтепродукта";
}
else
{
cell.Range.Text = "Начальнику филиала";
}
}
//------------------------------------------------------------------------------------------------------
doc.SaveAs2(@"D:\Report.docx");
app.Documents.Open(@"D:\Report.docx");
doc.Close();
app.Quit();
MemoryStream workStream = new MemoryStream();
string strPDFFileName = string.Format("Report.docx");
//PdfWriter.GetInstance(doc, workStream).CloseStream = false;
return File(workStream, "application/docx", strPDFFileName);
}