Вопрос по console, c#, .net, console-application – Разбор файла Excel и чтение ячейки

0

Я получил файл Excel. Я загрузил скриншот. Мне нужно написать приложение .NET (консольное приложение) для анализа файла Excel. Вы можете увидеть ячейку под названием «Имя функции». Мое приложение .NET должно найти эту конкретную ячейку и прочитать содержимое в этом столбце, например Template, InstanceFromTemplate, Task и так далее. Если он читает Task, он должен вызвать функцию CreateTask наподобие Task (); Если он читает InstanceFromTemplate, он должен вызвать функцию InstanceFromTemplate, например TaskInstanceFromTemplate ();

Я написал код для этих функций. Мне нужна только помощь в том, как разобрать таблицу Excel, перейти к этому конкретному столбцу, прочитать ячейки, содержащие имена функций в этом столбце, и вызвать соответствующую функцию. Любая помощь будет оценена.

Алгоритм похож

open excel file search for a header cell titled Function Name Read the first cell under the header cell If the first cell reads , call function (code for GetAllTemplate function is already there) Only need to call it afte finding it If the second cell , call function. Last cell under the header cell Function Name is reached. So, exit

Ваш Ответ

5   ответов
0
0

Просто хотел бы отметить, что работа с вмешательствами является грязной. Лучше всего будет использовать библиотеки.

Это должен быть комментарий.
3

Excel Data Reader и работать с данными в управляемом коде. На сайте CodePlex есть хороший пример того, что вам нужно.

0

вы можете сделать это следующим образом. Я предположил, что имена функций указывают на функции, которые определены в вашей книге Excel, в противном случае вам придется изменить эту часть, чтобы использовать отражение (но в этом случае вам понадобится приемник для методов, и я не вижу одного в вопросе).

        object hmissing = System.Reflection.Missing.Value; 

        Xls.Application App = new Xls.ApplicationClass();
        App.Visible = true;
        Xls.Workbook wb = App.Workbooks.Open(@"c:\tmp\cartel1.xls", hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
            hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing);
        Xls.Worksheet ws = (Xls.Worksheet)wb.ActiveSheet;
        Xls.Range rng = ws.UsedRange;
        Xls.Range hdr = rng.Find("Function Name", hmissing, hmissing, hmissing, hmissing, Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext, hmissing, hmissing, hmissing);
        string hdrAdd = hdr.get_Address(hmissing, hmissing, Microsoft.Office.Interop.Excel.XlReferenceStyle.xlA1, hmissing, hmissing);
        string[] pcs = hdrAdd.Split('$');
        string col = pcs[1];
        int row;
        int.TryParse(pcs[2], out row);
        string methName;
        row++;
        while ((methName = App.get_Range(col + row.ToString(), hmissing).get_Value(hmissing) as String) != null)
        {
            App.Run(methName.Split('.')[1], hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                hmissing, hmissing, hmissing);
            row++;
        }
3

что вы пытаетесь сделать, вы действительно должны использовать плагин LINQ to Ecxel. Я думаю, что это простой способ решить вашу проблему.

http://code.google.com/p/linqtoexcel/

Хорошо, я не знал об этой библиотеке - определенно буду использовать ее в будущих проектах. Спасибо
Я также нашел эту библиотеку только на этой неделе :)

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