Member 11663480 Ответов: 2

Экспорт таблицы данных в ms word в оконном приложении


У меня есть оконное приложение с таблицей данных. Данные поступают из sql server.
В этой таблице данных у меня есть несколько столбцов с текстовыми данными и 4 столбца с путем к изображению. Изображения хранятся в папке. Я хочу экспортировать таблицу данных в ms word с изображением. В надлежащем формате.
Может ли кто-нибудь помочь мне, как это сделать?

Что я уже пробовал:

DataTable dt=new DataTable();
Spire.DataExport.RTF.RTFExport rtfExport = new Spire.DataExport.RTF.RTFExport();
rtfExport.DataSource = Spire.DataExport.Common.ExportSource.DataTable;
rtfExport.DataTable = dt;
rtfExport.ActionAfterExport = Spire.DataExport.Common.ActionType.OpenView;
RTFStyle rtfStyle = new RTFStyle();
rtfStyle.FontColor = System.Drawing.Color.Blue;
rtfStyle.BackgroundColor = System.Drawing.Color.LightGreen;
rtfExport.RTFOptions.DataStyle = rtfStyle;
rtfExport.FileName = @"E\ToWord.doc";
rtfExport.SaveToFile();


Приведенный выше код экспортирует данные в ms word, но не в правильном формате, а также изображение не экспортируется.
помоги мне, как это сделать .
Спасибо

2 Ответов

Рейтинг:
8

Member 11663480

try
            {
                progressBar1.Visible = true;
               
                Microsoft.Office.Interop.Word.Application winword = new Microsoft.Office.Interop.Word.Application();
                winword.Visible = false;
                //Create a missing variable for missing value
                object missing = System.Reflection.Missing.Value;
                //Create a new document
                Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing);


              

              
                document.Content.SetRange(0, 0);
               
                Microsoft.Office.Interop.Word.Paragraph para1 = document.Content.Paragraphs.Add(ref missing);
                object styleHeading1 = "Heading 1";
                para1.Range.set_Style(ref styleHeading1);
                para1.Range.Text = "Post Add report";
                para1.Range.InsertParagraphAfter();

                string samplePath2 = System.Windows.Forms.Application.StartupPath + Path.DirectorySeparatorChar + "IPIMages" + Path.DirectorySeparatorChar;
                string imagePath = samplePath2 + "logo.jpg";

                Paragraph para = document.Content.Paragraphs.Add(ref missing);
                para.Range.InsertParagraphBefore();
               
                InlineShape map = document.InlineShapes.AddPicture(imagePath, ref missing, ref missing, ref missing);
                map.Height = 176;
                map.Width = 177;
                para.Range.InsertParagraphAfter();
                object oPageBreak = Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;
                para.Range.InsertBreak(ref oPageBreak);

                string[] coulmnname = value.Split(',');
                int coulmcount = dt.Rows.Count;
                progressBar1.Maximum = coulmcount-1;
                #region 
                Table firstTable = document.Tables.Add(para1.Range, coulmcount - 1, 7, ref missing, ref missing);
                firstTable.Borders.Enable = 1;
                int i = 0, r = 0, s = 0; string img = "";
                string samplePath = "", imagepath = "";


                foreach (Row row in firstTable.Rows)
                {
                    r++;
                    int j = 0;
                    foreach (Cell cell in row.Cells)
                    {
                        progressBar1.Value = r;
                        //Header row
                        if (cell.RowIndex == 1)
                        {
                            cell.Range.Text = coulmnname[i].ToString();
                            cell.Range.Font.Bold = 1;
                            cell.Range.Font.Name = "verdana";
                            cell.Range.Font.Size = 10;
                            cell.Shading.BackgroundPatternColor = WdColor.wdColorGray25;
                            cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                            cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                            i++;
                        }
                        //Data row
                        else
                        {


                            if (j == 3)
                            {
                                img = dt.Rows[r - 2][coulmnname[j]].ToString();
                                if (img == "No image")
                                {

                                    cell.Range.Text = dt.Rows[r - 2][coulmnname[j]].ToString();
                                    cell.Range.Font.Name = "Century";
                                    cell.Range.Font.Size = 14;
                                    cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                                    cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                                    j++;
                                }
                                else
                                {
                                    samplePath = System.Windows.Forms.Application.StartupPath + Path.DirectorySeparatorChar + "PostAd" + Path.DirectorySeparatorChar;
                                    imagepath = samplePath + dt.Rows[r - 2][coulmnname[j]];
                                    Range rngPic2 = document.Tables[1].Cell(r, 4).Range;
                                    rngPic2.InlineShapes.AddPicture(imagepath, ref missing, ref missing, ref missing);
                                    j++;
                                }
                            }
                            else if (j == 4)
                            {
                                img = dt.Rows[r - 2][coulmnname[j]].ToString();
                                if (img == "No image")
                                {
                                    cell.Range.Text = dt.Rows[r - 2][coulmnname[j]].ToString();
                                    cell.Range.Font.Name = "Century";
                                    cell.Range.Font.Size = 14;
                                    cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                                    cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                                    j++;
                                }
                                else
                                {
                                    samplePath = System.Windows.Forms.Application.StartupPath + Path.DirectorySeparatorChar + "PostAd" + Path.DirectorySeparatorChar;
                                    imagepath = samplePath + dt.Rows[r - 2][coulmnname[j]];
                                    Range rngPic2 = document.Tables[1].Cell(r, 5).Range;
                                    rngPic2.InlineShapes.AddPicture(imagepath, ref missing, ref missing, ref missing);
                                    j++;
                                }
                            }
                            else if (j == 5)
                            {
                                img = dt.Rows[r - 2][coulmnname[j]].ToString();
                                if (img == "No image")
                                {
                                    cell.Range.Text = dt.Rows[r - 2][coulmnname[j]].ToString();
                                    cell.Range.Font.Name = "Century";
                                    cell.Range.Font.Size = 14;
                                    cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                                    cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                                    j++;
                                }
                                else
                                {
                                    samplePath = System.Windows.Forms.Application.StartupPath + Path.DirectorySeparatorChar + "PostAd" + Path.DirectorySeparatorChar;
                                    imagepath = samplePath + dt.Rows[r - 2][coulmnname[j]];
                                    Range rngPic2 = document.Tables[1].Cell(r, 6).Range;
                                    rngPic2.InlineShapes.AddPicture(imagepath, ref missing, ref missing, ref missing);
                                    j++;
                                }

                            }

                            else if (j == 6)
                            {
                                img = dt.Rows[r - 2][coulmnname[j]].ToString();
                                if (img == "No image")
                                {
                                    cell.Range.Text = dt.Rows[r - 2][coulmnname[j]].ToString();
                                    cell.Range.Font.Name = "Century";
                                    cell.Range.Font.Size = 14;
                                    cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                                    cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                                    j++;
                                }
                                else
                                {
                                    samplePath = System.Windows.Forms.Application.StartupPath + Path.DirectorySeparatorChar + "PostAd" + Path.DirectorySeparatorChar;
                                    imagepath = samplePath + dt.Rows[r - 2][coulmnname[j]];
                                    Range rngPic2 = document.Tables[1].Cell(r, 7).Range;
                                    rngPic2.InlineShapes.AddPicture(imagepath, ref missing, ref missing, ref missing);
                                    j++;
                                }
                            }
                            else
                            {
                                cell.Range.Text = dt.Rows[r - 2][coulmnname[j]].ToString();
                                cell.Range.Font.Name = "Century";
                                cell.Range.Font.Size = 14;
                                cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                                cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                                j++;

                            }

                        }
                    }
                    s++;
                }
                #endregion

                //Save the document
                Random random = new Random();
                int randomNumber = random.Next(0, 100);
                object filename = @"E:\report" + randomNumber + ".docx";
                document.SaveAs2(ref filename);
                document.Close(ref missing, ref missing, ref missing);
                document = null;
         


Richard Deeming

Вы отметили этот вопрос как ASP.NET, поэтому вам нужно прочитать следующую статью базы знаний Microsoft:
Соображения по автоматизации работы офиса на стороне сервера[^]
В настоящее время корпорация Майкрософт не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любого автоматического, неинтерактивного клиентского приложения или компонента (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может демонстрировать нестабильное поведение и / или взаимоблокировку при запуске Office в этой среде.

Помимо того, что для сервера требуется лицензия MS Office, существует множество обручей, через которые вам придется перепрыгнуть, чтобы получить хоть какой-то шанс заставить этот код работать на реальном сервере. И даже тогда нет никакой гарантии, что он случайно не перестанет работать в какой-то момент в будущем.

Рейтинг:
0

sameer549

Попробовать это,
создайте свою хорошо отформатированную HTML-строку, преобразуйте html в документ ms word

http://stackoverflow.com/questions/5431580/convert-html-to-docx-in-c-sharp[^]

https://weblogs.asp.net/dixin/convert-html-to-well-formatted-microsoft-word-document[^]


[no name]

Спасибо за ответ
Это ссылка, по которой я получаю свой правильный код http://www.c-sharpcorner.com/UploadFile/muralidharan.d/how-to-create-word-document-using-C-Sharp/

на самом деле это не правильно, нужно добавить изображения условно в ячейку таблицы, но я не могу вам помочь, пожалуйста