0 / 0 / 0
Регистрация: 12.05.2014
Сообщений: 13
1

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

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

Author24 — интернет-сервис помощи студентам
Мне нужно скопировать 1 лист из одной книги excel в другую книгу excel. Именно лист, а не диапазон ячеек. Диапазон ячеек я нашёл тут Скопировать диапазон ячеек одной книги Excel в другую книгу Excel а как лист копировать целиком нету
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.07.2014, 20:47
Ответы с готовыми решениями:

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

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

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

7
 Аватар для ViterAlex
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
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 (Часть-1)
А что не нравится? Чтение есть, сохранение есть, далее IntelliSense + руки в помощь и все тут.

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

А так...
Может напишу на досуге статейку где-нибудь с примерами, включая этот...
0
 Аватар для Midian
387 / 366 / 196
Регистрация: 31.03.2013
Сообщений: 2,648
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();
            }
Миниатюры
Скопировать один лист из одной книги excel в другую книгу excel  
0
 Аватар для ViterAlex
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
18.07.2015, 21:21 7
Midian, а зачем открывать два экземпляра приложения, если достаточно в одном открыть две книги? В приведённом мной примере именно так и выполнено копирование
0
 Аватар для Midian
387 / 366 / 196
Регистрация: 31.03.2013
Сообщений: 2,648
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
19.07.2015, 11:20
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.07.2015, 11:20
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Язык программировани­я C++: сравнение с другими языками
Programming 06.02.2025
Современная разработка программного обеспечения предлагает множество языков программирования, каждый из которых обладает уникальными характеристиками и областями применения. C++ занимает особое место. . .
Язык программировани­­­я C++: достоинства и недостатки
Programming 06.02.2025
C++ считается одним из самых влиятельных языков программирования, продолжающим занимать ведущие позиции в мире разработки программного обеспечения. Этот язык появился как расширение языка C с. . .
Регулярные выражения в Python
BasicMan 06.02.2025
Регулярные выражения - это последовательности символов, определяющие правила поиска и сопоставления текстовых данных. В Python они используются для поиска подстрок, проверки соответствия текста. . .
Как создать свой мод для Майнкрафт с нуля на Java
IT_Exp 06.02.2025
Разработка мода для Minecraft начинается с правильной настройки среды разработки. Для создания мода потребуется Java Development Kit (JDK), интегрированная среда разработки и Minecraft Forge. JDK. . .
Async/await и асинхронное программировани­е в Java
IT_Exp 06.02.2025
Асинхронное программирование - это подход к организации вычислительных процессов, позволяющий приложениям эффективно использовать доступные ресурсы системы. В контексте Java этот метод приобретает. . .
Как исправить android.os.Netw­orkOnMain­Thread­Exception
hw_wired 06.02.2025
Исключение NetworkOnMainThreadException возникает при попытке выполнить сетевые операции в главном потоке Android-приложения. Главный поток отвечает за обработку пользовательского интерфейса и должен. . .
Как в Java определить, что массив содержит определенное значение
hw_wired 06.02.2025
В Java класс Arrays предлагает несколько способов для проверки наличия значений в массивах. Наиболее широко применяемый метод заключается в использовании комбинации Arrays. asList() и contains(). . . .
Как использовать virtualenv в Python. Виртуальные среды/окружения
hw_wired 06.02.2025
В Python виртуальные окружения решают одну из ключевых задач разработки - изоляцию зависимостей между проектами. Virtualenv создает отдельное пространство для каждого проекта, где устанавливаются. . .
Кнопка в HTML, которая работает как ссылка
hw_wired 06.02.2025
В HTML существует несколько подходов к созданию кнопки, которая функционирует как ссылка. Базовым элементом выступает тег button, который можно преобразовать в ссылку с помощью JavaScript. Для этого. . .
Как обновить страницу с помощью JavaScript
bytestream 06.02.2025
JavaScript предоставляет несколько базовых методов для обновления веб-страницы, которые встроены непосредственно в язык и доступны через объектную модель браузера. Основной метод обновления страницы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru