Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
22 / 22 / 3
Регистрация: 20.10.2010
Сообщений: 82
1
.NET 2.x

Объединение двух *.xls файлов

22.11.2010, 22:59. Показов 2940. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые формульчане! Возникла проблема с объдинением двух различных *.xls файлов. Задача стоит такая: второй *.xls скопировать в конец первого.
Видел на форуме много тем по Excel'ю, но того, что нужно не нашёл. Делаю с помощью Microsoft.Office.Interop.Excel.dll.

Вот мои наработки:
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
private void CombineXlsFile()
        {
            ApplicationClass app = new ApplicationClass();
            Workbook book = null;
            Worksheet sheet = null;
            Range range = null;
 
            ApplicationClass app1 = new ApplicationClass();
            Workbook book1 = null;
            Worksheet sheet1 = null;
            Range range1 = null;
 
            try
            {
                app.Visible = false;
                app.ScreenUpdating = false;
                app.DisplayAlerts = false;
                app1.Visible = false;
                app1.ScreenUpdating = false;
                app1.DisplayAlerts = false;
 
                //Открываем первый файл
                book = app.Workbooks.Open(this.xlsFname, Missing.Value, Missing.Value, Missing.Value
                                                  , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                                                 , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                                                , Missing.Value, Missing.Value, Missing.Value);
 
                //Открываем второй файл
                book1 = app1.Workbooks.Open(this.textBox1.Text, Missing.Value, Missing.Value, Missing.Value
                                                  , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                                                 , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                                                , Missing.Value, Missing.Value, Missing.Value);
 
 
                sheet = (Worksheet)book.Worksheets[1];
                range = sheet.get_Range("A1", Missing.Value);
                range = range.get_End(XlDirection.xlToRight);
                range = range.get_End(XlDirection.xlDown);
 
                sheet1 = (Worksheet)book1.Worksheets[1];
                range1 = sheet1.get_Range("A1", Missing.Value);
                range1 = range1.get_End(XlDirection.xlToRight);
                range1 = range1.get_End(XlDirection.xlDown);
 
                string downAddress = range.get_Address(
                    false, false, XlReferenceStyle.xlA1,
                    Type.Missing, Type.Missing);
 
                string downAddress1 = range1.get_Address(
                    false, false, XlReferenceStyle.xlA1,
                    Type.Missing, Type.Missing);
 
                range = sheet.get_Range("A1", downAddress);
                range1 = sheet1.get_Range("A1", downAddress1);
                object[,] values = (object[,])range.Value2;
                //object[,] values1 = (object[,])(range.Value2+range1.Value2);
                
 
                for (int i = 2; i <= values.GetLength(0); i++)
                {
                    for (int j = 1; j <= values.GetLength(1); j++)
                    {
                        //Здесь исключение
                        ((Range)sheet1.Cells[j, i + values.GetLength(0)]).Value2 = values[i, j].ToString();
                        progressBar2.Maximum = values.GetLength(0) * values.GetLength(1);
                        progressBar2.Value = i * j;
                    }
                }
                
                book1.Save();
            }
            catch (Exception e1)
            {
 
            }
            finally
            {
                range = null;
                sheet = null;
                if (book != null)
                    book.Close(false, Missing.Value, Missing.Value);
                book = null;
                if (app != null)
                    app.Quit();
                app = null;
 
                range1 = null;
                sheet1 = null;
                if (book1 != null)
                    book1.Close(false, Missing.Value, Missing.Value);
                book1 = null;
                if (app1 != null)
                    app1.Quit();
                app1 = null;
            }
        }
Подскажите пожалуйста, что я неправильно здесь делаю. За ответы заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2010, 22:59
Ответы с готовыми решениями:

Объединение двух файлов с возможностью последующего разделения
Я объединяю два файла в один при помощи FileStream. Как мне определить где заканчивается один файл...

Чтение данных из .xls файлов, защищенных от редактирования
Необходимо прочитать данные из файлов Excel (*.xls), у которых установлена &quot;Защита структуры книги...

Загрузка файлов xls на сервер
Добрый день коллеги. Столкнулся с такой проблемой. Моему сайту необходимо обменивать информацией с...

Создать страницу, на которую будут подгружаться данные из файлов формата .xls
Всем привет. Есть необходимость создать страницу (портал на sharepoint), на которую будут...

3
8 / 8 / 1
Регистрация: 20.07.2010
Сообщений: 22
23.11.2010, 15:43 2
Может стоит делать в csv формате? И Excel будет открывать, и вся задача сведется к одной строке.

File.AppendAllText(f_file, File.ReadAllText(s_file));
1
22 / 22 / 3
Регистрация: 20.10.2010
Сообщений: 82
23.11.2010, 16:19  [ТС] 3
Спасибо. Попробую.
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
23.11.2010, 21:28 4
range1 = range1.get_End(XlDirection.xlToRight);
range1 = range1.get_End(XlDirection.xlDown);


get_End - берет максимальный диапазон листа. Используй UsedRange

Два экземпляра Excel.Application - нет нужды запускать - можно один. Workbook-и будут разные.

А копировать ячейкт лучше с помощью методов Range:
Copy

и PasteSpecial

Добавлено через 8 минут
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
        #region Копирование одного листа в конец другого
        public static void excelCopyFooter(Excel._Worksheet src, Excel._Worksheet dest, int rowDest, int colDest, bool deleteSrc)
        {
            if (rowDest<1 || colDest<1)
                throw new Exception("Не правильно задан параметры (rowDest, colDest)");
            string s = src.UsedRange.get_Address(true, true,Excel.XlReferenceStyle.xlA1,Missing.Value,Missing.Value);
            s = "$A$1"+s.Substring(s.IndexOf(':'));
 
            Excel.Range oRng = src.get_Range(s,Missing.Value);
            Excel.Range oRng2 = dest.get_Range(dest.Cells[rowDest,colDest], dest.Cells[rowDest + oRng.Rows.Count, colDest + oRng.Columns.Count]);
            oRng.Copy(Missing.Value);
            oRng2.PasteSpecial(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteAll,
                                  Microsoft.Office.Interop.Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,
                                  false, false);
            for (int i=0; i<oRng.Rows.Count; i++)
            {
                oRng = src.get_Range("A"+(i+1)+":A"+(i+1),Missing.Value);
                oRng2 = dest.get_Range("A"+(rowDest+i)+":A"+(rowDest+i),Missing.Value);
                double high = (double) oRng.EntireRow.RowHeight;
                oRng2.EntireRow.RowHeight = high; 
            }
            if (deleteSrc)
                src.Delete();
        }
        #endregion
1
23.11.2010, 21:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2010, 21:28
Помогаю со студенческими работами здесь

Объединение двух файлов
Даны два двоичных файла с числами. Получить новый файл, в котором на четных местах будут стоять...

Объединение двух файлов XML по ключам
Есть два файла XML: zap.xml &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;dataroot&gt; ...

Генерация файлов .doc из .xls
Доброго времени суток. Такая проблема приключилась. Нужно написать программное средство для...

Объединение файлов xls из каталога в один файл/таблицу
Добрый вечер. Подскажите, пожалуйста, как можно реализовать следующее: В папке есть файлы xls...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru