Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.98/41: Рейтинг темы: голосов - 41, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 12.05.2014
Сообщений: 13
1

Скопировать один лист из одной книги excel в другую книгу excel

21.07.2014, 20:47. Просмотров 7695. Ответов 7
Метки нет (Все метки)

Мне нужно скопировать 1 лист из одной книги excel в другую книгу excel. Именно лист, а не диапазон ячеек. Диапазон ячеек я нашёл тут Скопировать диапазон ячеек одной книги Excel в другую книгу Excel а как лист копировать целиком нету
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2014, 20:47
Ответы с готовыми решениями:

Скопировать диапазон ячеек одной книги Excel в другую книгу Excel
Из темы все ясно... Не могу разобраться никак. Можно ли открыть одну книгу, скопировать диапазон...

Необходимо скопировать все данные из книги Excel в строковую переменную
Есть одна проблема. Необходимо скопировать все данные из книги Excel в строковую переменную - в...

Как редактировать книгу Excel без её открытия в Excel?
Я реализовал на VBA процедуру пакетного редактирования всех книг в папке, и подготовки сводной...

Изменить область печати в листе Excel, чтобы она занимала один лист (передвинуть синюю границу)
Возникла задача автоматической генерации файла Excel. Использую С# и библиотеку...

7
8036 / 4323 / 1705
Регистрация: 11.02.2013
Сообщений: 9,207
22.07.2014, 03:51 2
Лучший ответ Сообщение было отмечено Stepan Boiko как решение

Решение

А лист скопировать точно также. Обе книги должны быть открыты:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Excel.Application xlApp=null;
Excel.Workbook xlWbSource ,xlWbTarget;
try {
    xlApp = new Excel.Application();
    xlWbSource = xlApp.Workbooks.Open(@"Путь к книге, откуда копировать лист");
    xlWbTarget = xlApp.Workbooks.Add();//Новая книга
    //Вставка первого листа из книги xlWbSource перед первым листом книги xlWbTarget
    (xlWbSource.Worksheets[1] as Excel.Worksheet).Copy(Before: xlWbTarget.Worksheets[1]);
    xlApp.Visible = true;
}
catch (Exception) {
    if (xlApp != null)
        xlApp.Quit();
}
3
Водяной Змей
22.07.2014, 08:33
  #3

Не по теме:

Вместо COM Excel лучше использовать библиотеку NPOI.
Она не требует Excel => меньше глюков и выше скорость открытия и сохранения таблиц.

0
0 / 0 / 0
Регистрация: 12.05.2014
Сообщений: 13
22.07.2014, 17:30  [ТС] 4
Цитата Сообщение от Водяной Змей Посмотреть сообщение
библиотеку NPOI.
Так-то да, но по ней нету уроков, а тех примеров которые там даны недостаточно. Можете тогда подсказать как выполнить эту же операцию с помощью библиотеки NPOI?
0
Заблокирован
22.07.2014, 21:14 5
а тех примеров которые там даны недостаточно
Этих? Visual Basic .NET FAQ. Готовые решения, полезные коды
А что не нравится? Чтение есть, сохранение есть, далее IntelliSense + руки в помощь и все тут.

Да и по COM Excel уроков не больно много. Если бы когда я начал его изучать, я бы увидел те исходники по NPOI, я бы точно начал с NPOI.

А так...
Может напишу на досуге статейку где-нибудь с примерами, включая этот...
0
232 / 231 / 172
Регистрация: 31.03.2013
Сообщений: 2,032
12.07.2015, 18:54 6
ViterAlex, Интересно, я вот столкнулся с такой вот проблемой, вызываю метод Copy, он пишет что не может получить свойство класса Copy:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Microsoft.Office.Interop.Excel.Application ObjWorkExcelInput = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook ObjWorkBookInput = ObjWorkExcelInput.Workbooks.Open(textBoxPromotionalSales.Text, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheetInput = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBookInput.Sheets["Promotional-Sales"];
            Microsoft.Office.Interop.Excel.Application ObjWorkExcelOutput = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook ObjWorkBookOutput = ObjWorkExcelOutput.Workbooks.Open(@"C:\Users\ZLO\Desktop\Работа\Выходной файл (тестовый)", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheetOutput = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBookOutput.Sheets["Promotional sales"];
            try
            {
                ObjWorkSheetOutput.Cells.Clear();
                ObjWorkBookOutput.Sheets["Promotional sales"].Copy(Before: ObjWorkBookInput.Sheets["Promotional-Sales"]);
                ObjWorkBookOutput.Save();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            finally
            {
                ObjWorkBookInput.Close(false, Type.Missing, Type.Missing);
                ObjWorkBookOutput.Close(true, Type.Missing, Type.Missing);
                ObjWorkExcelInput.Quit(); ObjWorkExcelOutput.Quit(); GC.Collect();
            }
0
Миниатюры
Скопировать один лист из одной книги excel в другую книгу excel  
8036 / 4323 / 1705
Регистрация: 11.02.2013
Сообщений: 9,207
18.07.2015, 21:21 7
Midian, а зачем открывать два экземпляра приложения, если достаточно в одном открыть две книги? В приведённом мной примере именно так и выполнено копирование
0
232 / 231 / 172
Регистрация: 31.03.2013
Сообщений: 2,032
19.07.2015, 11:20 8
ViterAlex, Смысл был такой, что это два разных файла Excel и копирование листа идет из одного файла в другой. Решил проблему след. образом:
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
private void LoadDataPromotionalSales()
        {
            Microsoft.Office.Interop.Excel.Application ObjWorkExcelInput = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook ObjWorkBookInput = ObjWorkExcelInput.Workbooks.Open(textBoxPromotionalSales.Text, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheetInput = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBookInput.Sheets.get_Item(1);
            Microsoft.Office.Interop.Excel.Application ObjWorkExcelOutput = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook ObjWorkBookOutput = ObjWorkExcelOutput.Workbooks.Open(@"C:\Users\ZLO\Desktop\!!!!!!!!!!!!!!!!!\Работа\Выходной файл (тестовый).xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheetOutput = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBookOutput.Sheets.get_Item(8);
            var countCellInput = ObjWorkSheetInput.Cells.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell);
            try
            {
                Invoke((Action)delegate
                {
                    foreach (var c in Controls)
                        if (c is Button)
                            ((Button)c).Enabled = false;
                    progressBarLoadingExcelFile.Value = 0;
                    progressBarLoadingExcelFile.Visible = true;
                    progressBarLoadingExcelFile.Maximum = (int)countCellInput.Row;
                    labelStatus.Text = "Подождите, идет загрузка данных Promotional Sales.";
                });
                ObjWorkSheetOutput.Cells.Clear();
                for (int i = 1; i <= (int)countCellInput.Row; i++)
                {
                    for (int j = 1; j <= (int)countCellInput.Column; j++)
                    {
                        ObjWorkSheetOutput.Cells[i, j].Value = ObjWorkSheetInput.Cells[i, j].Value;
                        if (j < 3)
                            ObjWorkSheetOutput.Cells[i + 3, j].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
                        else ObjWorkSheetOutput.Cells[i + 3, j].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignRight;
                    }
                    ObjWorkSheetOutput.Columns.AutoFit();
                    Invoke((Action)delegate { progressBarLoadingExcelFile.Value = i; });
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка загрузки данных Promotioanal Sales.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Invoke((Action)delegate
                {
                    foreach (var c in Controls)
                        if (c is Button)
                            ((Button)c).Enabled = true;
                });
            }
            finally
            {
                if (ObjWorkExcelInput != null && ObjWorkExcelOutput != null)
                {
                    ObjWorkBookInput.Close(false, Type.Missing, Type.Missing);
                    ObjWorkExcelInput.Quit(); GC.Collect();
                    Invoke((Action)delegate
                    {
                        progressBarLoadingExcelFile.Visible = false;
                        progressBarLoadingExcelFile.Value = 0;
                        labelStatus.Text = null;
                    });
                    LoadDataMarginShipped(ObjWorkExcelOutput, ObjWorkBookOutput);
                }
            }
        }
        #endregion
Дальше у меня вызывается следующая функция и в ее конструктор я передаю объект выходного отчета Excel и т.д. Заметил еще один прикольный момент, на ОС 8.1 не корректно срабатывает Finaly, он не закрывает потоки открытых файлов Excel, просто перестает к ним обращаться, но процессы висят в диспетчере задач, на ОС 7 все корректно закрывается
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2015, 11:20

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как скопировать лист Excel из одной книги в другую
Подскажите, пожалуйста, как скопировать целиком лист из одной книги в другую со всеми разделителями...

Как пользуясь ADO извлечь строки c задаными критериями из одной книги Excel и поместить в другую книгу Excel?
Доброго времени суток, форумчане! Кто знает, подскажите пожалуйста, как с помощью ADO открыть...

Excel: Как перенести лист из одной рабочей книги в другую?
?

сбой в Excel 2007 при попытке скопировать листы из одной книги в другую
Доброго всем времени суток. Вопрос в следующем: почему может не работать стандартная функция...


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

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

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