Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
1

Работа с Excel (нет доступа к пространству имен Excel)

01.08.2012, 15:00. Просмотров 4992. Ответов 30
Метки нет (Все метки)

Здравствуйте!
У меня проблема в том, что я делаю все так как там, но выдает ошибку в строчках на слова Excel, например:
C#
1
2
3
4
Excel.Application xlApp; // здесь на Excel Error Namespace '<global namespace>' contains a definition conflicting with alias 'Excel'    C:\Users\Администратор\Desktop\Excel\Excel\Form1.cs 23  13  Excel
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range range;
Я думаю, что все это из-за того, что разные версии Excel. Я подключал Microsoft Excel 14.0 Object Library, а в примере Microsoft Excel 12.0 Object Library. Тогда, что нужно для того, что бы работал код вместе с Microsoft Excel 14.0 Object Library?
Заранее спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2012, 15:00
Ответы с готовыми решениями:

Обращение к пространству имен другого обьекта
Есть два проекта, мне нужно без ссылки на другой проект обратиться к пространству имен другого...

Работа с документами Excel без Microsoft.Office.Interop.Excel
всем добрый день все дело в том что для своих программ я использую БД Excel но! однако не все...

Как объявить класс Data, и к какому пространству имен он относится?
Добрый вечер, форумчане! Объясните, как объявить класс Data, к какому пространству имен он...

Передача в ListBox списка имен листов Excel
Здрасте. Подскажите, как вывести список имен листов Excel файла в ListBox, с дальнейшим выводом в...

Подключение пространства имен для работы с Excel
Здравствуйте! Мне необходимо разобраться как работать с документами Excel. В интернете нашел...

30
Tessen
689 / 656 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
01.08.2012, 15:10 2
C#
1
using Excel = Microsoft.Office.Interop.Excel;
ТАМ эта строчка есть
а у вас?
0
Cyrus
Заблокирован
01.08.2012, 15:12 3
Цитата Сообщение от Nike Jagger Посмотреть сообщение
with alias 'Excel'
Возможно из за отсутствия этого.
C#
1
 using Excel = Microsoft.Office.Interop.Excel;
Добавлено через 35 секунд

Не по теме:

Опять опоздала:)

0
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
01.08.2012, 15:17  [ТС] 4
есть...

Добавлено через 52 секунды
это не из-за разных версий Microsoft Excel Object Library?
0
01.08.2012, 15:17
Tessen
689 / 656 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
01.08.2012, 15:41 5
покажите все что идет выше этого кода, от самого начала программы?
0
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
01.08.2012, 16:08  [ТС] 6
вот весь код, правд он аналогичен тому, который находится по ссылке:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel; 
using System.Reflection;
 
namespace Excel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            Excel.Range range;
 
            string str;
            int rCnt = 0;
            int cCnt = 0;
 
            xlApp = new Excel.ApplicationClass();
            xlWorkBook = xlApp.Workbooks.Open("csharp.net-informations.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
 
            range = xlWorkSheet.UsedRange;
 
            for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
            {
                for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
                {
                    str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;
                    MessageBox.Show(str);
                }
            }
 
            xlWorkBook.Close(true, null, null);
            xlApp.Quit();
 
            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);
        }
 
        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        } 
    }
}
0
Tessen
689 / 656 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
01.08.2012, 17:10 7
C#
1
2
3
using Excel = Microsoft.Office.Interop.Excel; 
 
namespace WindowsApplication1
образец

C#
1
2
3
using Excel = Microsoft.Office.Interop.Excel; 
 
namespace Excel
ваш вариант

теперь вам понятно почему при написании Excel программа не может выбрать куда же ей обратиться?
переименуйте что нибудь одно
желательно - ваш namespace
1
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
01.08.2012, 21:33  [ТС] 8
вот блин на такой фигне попался, просто я проект так назвал, а он мне и неймспейс также.
Спасибо, что открыли глаза!

Только вот теперь ругается на строчку:
C#
1
2
3
xlApp = new Excel.ApplicationClass();
// Error    The type 'Microsoft.Office.Interop.Excel.ApplicationClass' has no constructors defined
// Error    Interop type 'Microsoft.Office.Interop.Excel.ApplicationClass' cannot be embedded. Use the applicable interface instead.
0
Tessen
689 / 656 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
01.08.2012, 21:39 9
C#
1
= new Excel.Application();
что то мне подсказывает что надо так
1
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
01.08.2012, 21:53  [ТС] 10
только он чего-то книгу не создает...
0
Tessen
689 / 656 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
01.08.2012, 22:14 11
а должен? эта строчка ее и не создает
0
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
01.08.2012, 22:36  [ТС] 12
я не про данную строку, просто сама программа должна создавать Excel книгу.
А она не создает...
0
Tessen
689 / 656 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
01.08.2012, 23:47 13
эм, да нет, вроде не должна, она ее открывает, потом чз пару строчек кода закрывает, ну и выводит в мессаджбокс что прочитала в ней
0
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
02.08.2012, 01:17  [ТС] 14
блин, но там же статья по тому как программно создать книгу Excel...
0
Tessen
689 / 656 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
02.08.2012, 09:13 15
создание книги происходит здесь
C#
1
2
3
4
5
6
xlWorkBook = xlApp.Workbooks.Add(misValue);//добавляем книгу новую
 
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); //выбираем 1 лист
            xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com"; // записываем в ячейку
 
            xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);//сохраняем
у вас:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            xlWorkBook = xlApp.Workbooks.Open("csharp.net-informations.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);//открываем существующую книгу
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);//выбираем лист
 
            range = xlWorkSheet.UsedRange; //выбираем область
 
            for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++) //по всем строкам области
            {
                for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++) //по всем столбцам
                {
                    str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2; //берем строку из ячейки
                    MessageBox.Show(str); // выводим строку в месаджбокс
                }
            }
 
            xlWorkBook.Close(true, null, null);//закрываем книгу
            xlApp.Quit();//закрываем эксель
ваша программа ничего создавать не обязана
0
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
02.08.2012, 13:48  [ТС] 16
это не моя программа, просто я по примеру делал...
тогда, что делает эта вся программа? и как мне просто создать книгу?

Добавлено через 12 секунд
ничего не понимаю
0
Tessen
689 / 656 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
02.08.2012, 13:55 17
Цитата Сообщение от Nike Jagger Посмотреть сообщение
это не моя программа, просто я по примеру делал...
тогда, что делает эта вся программа? и как мне просто создать книгу?

Добавлено через 12 секунд
ничего не понимаю
программа открывает csharp.net-informations.xls из папки программы, считывает из нее текст всех ячеек и выводит по очереди в месаджбокс, после чего закрывается
как создать - ну вот же
C#
1
2
3
4
5
6
7
xlWorkBook = xlApp.Workbooks.Add(misValue);//собственно создание книги
 
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); //это уже редактирование содержимого книги
            xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com"; //это уже редактирование содержимого книги
 
            xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
//сохраняем, если не сохраним мы просто создали книгу, посмотрели на нее и закрыли, а файла не появится
1
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
02.08.2012, 14:04  [ТС] 18
что за misValue?

Добавлено через 3 минуты
и в какой директории создается файл?
0
Tessen
689 / 656 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
02.08.2012, 14:57 19
C#
1
object misValue = System.Reflection.Missing.Value;
это код из вашей ссылки
создается в директории программы, но вы можете указать полное имя файла например @"C:\1.xlsx" и создастся там где напишете
1
Nike Jagger
37 / 37 / 10
Регистрация: 08.03.2012
Сообщений: 235
02.08.2012, 15:09  [ТС] 20
простите за мою невнимательность.
спасибо, что все разъяснили!
может подскажите какие-нибудь книги на русском по работе с Excel на C#?
0
02.08.2012, 15:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 15:09

Экспорт в Excel: Прекращена работа программы "Microsoft Excel"
Файл сохраняется успешно, но поле строки excelApp.Quit(); Появляется окно ошибки Excel: ...

Контроль доступа к файлу Excel
Подскажите пожалуйста, есть файл Excel (2003,2007,2010), он лежит в общем доступе, его могут...

ASP и Excel. Excel тупит (проблемы с правами доступа?)
Hello, all! Вот у меня опять что-то не работает. Что нужно: взять файлик xls, скопировать,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru