danila_net
@danila_net
Изучаю CLR, C#, ASP.NET

Как добавить таблицу к документу, используя библиотеку Microsoft.office.interop.word?

Я использую библиотеку 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);

        }
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы