Чтение файла docx с таблицей - PullRequest
       25

Чтение файла docx с таблицей

0 голосов
/ 24 сентября 2018

У меня есть простой документ с одной таблицей.Я хотел бы прочитать его содержание клеток.Я нашел много учебников для письма, но не для чтения.

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

var document = DocX.Create(@"mydoc.docx");

var s = document.GetSections();
foreach (var item in s)
{

}

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Если у вас есть только одна таблица в документе, она должна быть довольно простой.Попробуйте это:

DocX doc = DocX.Load("C:\\Temp\\mydoc.docx");
Table t = doc.Table[0];
//read cell content
string someText = t.Rows[0].Cells[0].Paragraps[0].Text;

Вы можете циклически проходить по строкам и ячейкам таблицы внутри каждой строки, а также по абзацам внутри каждой ячейки [i], если есть больше абзацев.Вы можете сделать это с помощью простого цикла for:

for (int i = 0; i < t.Rows.Count; i++)
{
someText = t.Rows[i].Cells[0].Paragraphs[0].Text;
}

Надеюсь, это поможет.

0 голосов
/ 24 сентября 2018

Я использую следующие псевдонимы пространства имен:

using excel = Microsoft.Office.Interop.Excel;
using word = Microsoft.Office.Interop.Word; 

Вы можете специально получить таблицы, используя этот код:

        private void WordRunButton_Click(object sender, EventArgs e)
        {

            var excelApp = new excel.Application();
            excel.Workbooks workbooks = excelApp.Workbooks;
            var wordApp = new word.Application();
            word.Documents documents = wordApp.Documents;
            wordApp.Visible = false; 
            excelApp.Visible = false;
// You don't want your computer to actually load each one visibly; would ruin performance.

            string[] fileDirectories = Directory.GetFiles("Some Directory", "*.doc*",
                   SearchOption.AllDirectories);

            foreach (var item in fileDirectories)
            {
                word._Document document = documents.Open(item);

                foreach (word.Table table in document.Tables)
                {
                        string wordFile = item;
                        appendName = Path.GetFileNameWithoutExtension(wordFile) + " Table " + tableCount + ".xlsx"; 
                       //Not needed if you're not going to save each table individually

                        var workbook = excelApp.Workbooks.Add(1);
                        excel._Worksheet worksheet = (excel.Worksheet)workbook.Sheets[1];

                        for (int row = 1; row <= table.Rows.Count; row++)
                        {
                            for (int col = 1; col <= table.Columns.Count; col++)
                            {

                                var cell = table.Cell(row, col);
                                var range = cell.Range;
                                var text = range.Text;

                                var cleaned = excelApp.WorksheetFunction.Clean(text);

                                worksheet.Cells[row, col] = cleaned;
                            }
                        }
                        workbook.SaveAs(Path.Combine("Some Directory", Path.GetFileName(appendName)), excel.XlFileFormat.xlWorkbookDefault); 
                        //Last arg can be whatever file extension you want 
                        //just make sure it matches what you set above.

                        workbook.Close();
                        Marshal.ReleaseComObject(workbook);

                    tableCount++;
                }

                document.Close();
                Marshal.ReleaseComObject(document);
            }
//Microsoft apps are picky with memory. Make sure you close and release each instance once you're done with it.
//Failure to do so will result in many lingering apps in the background
            excelApp.Application.Quit();
            workbooks.Close();
            excelApp.Quit();

            Marshal.ReleaseComObject(workbooks);
            Marshal.ReleaseComObject(excelApp);

            wordApp.Application.Quit();
            wordApp.Quit();

            Marshal.ReleaseComObject(documents);
            Marshal.ReleaseComObject(wordApp);
        }

Документ представляет собой фактический тип документа word (слово.Документ).Обязательно проверяйте наличие разделенных ячеек, если они у вас есть!

Надеюсь, это поможет!

...