Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с Excel 
:(
    Опции темы
VisMaster
Дата 19.9.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.3.2007
Где: СПб

Репутация: нет
Всего: нет



Здравствуйте все. 

Просмотрел все что было по EXCEL в других темах, но так ничего и не нашел... smile 

Подскажите пожалуйста как мне открыть файл   EXCEL с большим количеством листов в нем, как потом перебирать эти листы, и вытаскивать нужную мне информацию с определенных ячеек?

Заранее спасибо...
PM MAIL   Вверх
VisMaster
Дата 19.9.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.3.2007
Где: СПб

Репутация: нет
Всего: нет



Даааа что то никто не может мне помочь (( 

Забыл сказать, я работаю со строками, и еще одно как обратиться к элементу EXcel файла, когда он находиться в например 3 строке и в двух объедененных столбцах "A" и "B"???????
PM MAIL   Вверх
thomas
Дата 20.9.2007, 08:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 6
Всего: 65



VisMaster, 
Приветствую.
Ты только не обижайся, но тебе сюда. Я так думаю.  smile 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
VisMaster
Дата 20.9.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.3.2007
Где: СПб

Репутация: нет
Всего: нет



спасибо, это мне и нужно было...
+1 
прочитаю, если что снова в эту тему напишу
PM MAIL   Вверх
moric83
Дата 20.9.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 9.7.2007

Репутация: нет
Всего: 1



Лутше используй позднее связывание и у тебя не будет проблем при использывание на других машинах. 
То что тебе предлагают называется раннее  связывание и ты будеш зависить от версий MS Excel.
Смотри пример: http://www.sql.ru/forum/actualthread.aspx?tid=286272&hl=timur999
PM MAIL   Вверх
VisMaster
Дата 21.9.2007, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.3.2007
Где: СПб

Репутация: нет
Всего: нет



Ну вот прочитал, возникла проблемма:
открываю файл вот так:
Цитата

 Excel.Workbook workbook2 = app.Workbooks.Open(@"c:\1q.xls", optional, optional, optional,
                      optional, optional, optional, optional, optional, optional, optional,
                      optional, optional, optional, optional);


затем пишу туда в две ячейки новую инфу и сохраняю вот так:
Цитата

 workbook2.SaveAs(@"c:\1q1.xls", optional, optional, optional, optional,
                            optional, Excel.XlSaveAsAccessMode.xlShared, optional, optional,
                            optional, optional, optional);


Затем открываю из винды файла 1q1.xls, а при закрытии он мне всегда придлогает сохранить изменения, хотя я ничего не изменял в нем...

Может кто знает как от этого избавиться????
PM MAIL   Вверх
VisMaster
Дата 22.9.2007, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.3.2007
Где: СПб

Репутация: нет
Всего: нет



Все спасибо разобрался надо было сохранять так:
Цитата

 workbook2.SaveAs(@"c:\1q1.xls", optional, optional, optional, optional,
                            optional, Excel.XlSaveAsAccessMode.xlExclusive, optional, optional,
                            optional, optional, optional);

PM MAIL   Вверх
VisMaster
Дата 23.11.2007, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.3.2007
Где: СПб

Репутация: нет
Всего: нет



moric83 написал я приложение, только вот использовал раннее связывание не хотел в то время заморачиваться, а сейчас понадобилось все же переделать...По твоей ссылке вот этот код нашел:
Код

using System;
using System.Collections;
using System.Reflection;
using System.Runtime.InteropServices;

namespace Test
{
    namespace Excel
    {
        /// <summary>
        /// Summary description for Application
        /// </summary>
        public class Application
        {
            private object application;

            public bool Visible
            {
                get
                {
                    return Convert.ToBoolean(application.GetType().InvokeMember("Visible", BindingFlags.GetProperty, null, application, null));
                }
                set
                {
                    application.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, application, new object[] {value});
                }
            }

            public void Quit()
            {
                application.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, application, null);
                Marshal.ReleaseComObject(application);
                GC.GetTotalMemory(true);
            }

            public Workbooks Workbooks
            {
                get
                {
                    return new Workbooks(application.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, application, null));
                }
            }

            public object DecimalSeparator
            {
                get
                {
                    return application.GetType().InvokeMember("DecimalSeparator", BindingFlags.GetProperty, null, application, null);
                }
                set
                {
                    application.GetType().InvokeMember("DecimalSeparator", BindingFlags.SetProperty, null, application, new object[]{value});
                }
            }

            public object ThousandsSeparator
            {
                get
                {
                    return application.GetType().InvokeMember("ThousandsSeparator", BindingFlags.GetProperty, null, application, null);
                }
                set
                {
                    application.GetType().InvokeMember("ThousandsSeparator", BindingFlags.SetProperty, null, application, new object[]{value});
                }
            }

            public object UseSystemSeparators
            {
                get
                {
                    return application.GetType().InvokeMember("UseSystemSeparators", BindingFlags.GetProperty, null, application, null);
                }
                set
                {
                    application.GetType().InvokeMember("UseSystemSeparators", BindingFlags.SetProperty, null, application, new object[]{value});
                }
            }

            public Application()
            {
                string sAppProgID = "Excel.Application";
                Type tExcelObj = Type.GetTypeFromProgID(sAppProgID);
                application = Activator.CreateInstance(tExcelObj);
            }
        }

        /// <summary>
        /// Summary description for Workbooks
        /// </summary>
        public class Workbooks
        {
            private object workbooks;

            public Workbook Add()
            {
                return new Workbook(workbooks.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, workbooks, null));
            }

            public Workbook Open(string fileName)
            {
                return new Workbook(workbooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, workbooks, new object[] {fileName}));
            }

            public void Close()
            {
                workbooks.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, workbooks, null);
                Marshal.ReleaseComObject(workbooks);
                GC.GetTotalMemory(true);
            }

            public Workbooks(object _workbooks)
            {
                workbooks = _workbooks;
            }
        }

        /// <summary>
        /// Summary description for Workbook
        /// </summary>
        public class Workbook
        {
            private object workbook;

            public void Save()
            {
                workbook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, workbook, null);
            }

            public void SaveAs(string fileName)
            {
                workbook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, workbook, new object[]{fileName});
            }

            public void Close()
            {
                workbook.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, workbook, null);
                Marshal.ReleaseComObject(workbook);
                GC.GetTotalMemory(true);
            }

            public Worksheets Worksheets
            {
                get
                {
                    return new Worksheets(workbook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, workbook, null));
                }
            }

            public Workbook(object _workbook)
            {
                workbook = _workbook;
            }
        }

        /// <summary>
        /// Summary description for Worksheets
        /// </summary>
        public class Worksheets
        {
            private object worksheets;

            public Worksheet get_Worksheet(int index)
            {
                return new Worksheet(worksheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, worksheets, new object[]{index}));
            }

            public Worksheets(object _worksheets)
            {
                worksheets = _worksheets;
            }
        }

        /// <summary>
        /// Summary description for Worksheet
        /// </summary>
        public class Worksheet
        {
            private object worksheet;

            public Range get_Range(string range)
            {
                return new Range(worksheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, worksheet, new object[]{range}));
            }

            public Worksheet(object _worksheet)
            {
                worksheet = _worksheet;
            }
        }

        /// <summary>
        /// Summary description for Range
        /// </summary>
        public class Range
        {
            private object range;

            public object Value2
            {
                get
                {
                    return range.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, range, null);
                }
                set
                {
                    range.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, range, new object[] {value});
                }
            }

            public object Text
            {
                get
                {
                    return range.GetType().InvokeMember("Text", BindingFlags.GetProperty, null, range, null);
                }
                set
                {
                    range.GetType().InvokeMember("Text", BindingFlags.SetProperty, null, range, new object[] {value});
                }
            }

            public object Formula
            {
                get
                {
                    return range.GetType().InvokeMember("Formula", BindingFlags.GetProperty, null, range, null);
                }
                set
                {
                    range.GetType().InvokeMember("Formula", BindingFlags.SetProperty, null, range, new object[] {value});
                }
            }

            public object NumberFormat
            {
                get
                {
                    return range.GetType().InvokeMember("NumberFormat", BindingFlags.GetProperty, null, range, null);
                }
                set
                {
                    range.GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty, null, range, new object[] {value});
                }
            }

            public Range(object _range)
            {
                range = _range;
            }
        }
    }
}


но здесь нет некоторых методов например:range.get_Offset,  range.Select,  get_Range(r1, r2),   range2.VerticalAlignment, Cell(r1, r2), range2.Borders и т.д.

Может кто знает где достать примерно такой же класс (для позднего связывания) только полностью аналогичный Microsoft-овскому, или как мне этот дописать... 

Заранее благодарен... 

Это сообщение отредактировал(а) VisMaster - 23.11.2007, 15:42
PM MAIL   Вверх
VisMaster
Дата 23.11.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.3.2007
Где: СПб

Репутация: нет
Всего: нет



ни у кого что ли такой проблемы не возникало???  smile 

может кто знает как организовать позднее связывание для метода с 2 параметрами, такой как Cell (parm1,parm2) ???

Это сообщение отредактировал(а) VisMaster - 23.11.2007, 15:45
PM MAIL   Вверх
Mormishka
Дата 24.2.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



А что нужно подключать для работы с Excel ?
PM MAIL   Вверх
jonie
Дата 24.2.2011, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Mormishka, нужны microsoft office PIA (Primary interop Assemblies)
вот например для 2010 офиса http://www.microsoft.com/downloads/en/deta...45-23250dc15855

соотвественно они поставят тебе в систему interop-ы, которые ты и подключишь к проекту Add reference


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1632 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.