Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/17: Рейтинг темы: голосов - 17, средняя оценка - 4.65
genrinew
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 5
1

excel - копировать содержание листа в буфер

16.05.2010, 18:29. Просмотров 3072. Ответов 4
Метки нет (Все метки)

Подскажите, как на c# скопировать содержимое всего листа excel в буфер.
(преобразовать макрос Cells.Select Selection.Copy) Чтобы коротко и понятно...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2010, 18:29
Ответы с готовыми решениями:

Как программно удалить строки из листа Excel?
В общем то в теме поместился весь вопрос нужно программно C# удалить несколько...

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

Печать листа Access/Excel
Здравствуйте! У меня такая проблема. Я сделал приложение на C# для работы с БД...

Необходимо из Excel через буфер обмена скопировать в datatable пять столбцов
Добрый день. Есть dataset, есть datatable с пятью столбцами и datagridview....

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

4
genrinew
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 5
17.05.2010, 21:19  [ТС] 2
Так делаю, есть идеи доделать? Скопировать вв буфер или в переменную.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
   Excel.Application excel = new Excel.Application();
   Excel.Workbook workbook = excel.Workbooks.Open(Application.StartupPath+"\\Ex.xls", 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);
 
 excel.Visible = true;
 
Excel.Sheets sheets = workbook.Worksheets;
 
//выбор листа
Excel.Worksheet mySheet = (Excel.Worksheet)sheets.get_Item("Лист1");
//получение ячеек
var name = mySheet.get_Range("B5", "B5").Value2; //получает в строку одну ячейку
// или так, это я не знаю что за массив, и как его преобразовать в строку или отправить в буфер...
var name2 = mySheet.get_Range("B5", "B100").Value2;
Не в цикле же по одной ячейке перебирать....
0
mitsky
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
18.05.2010, 10:12 3
а для чего это необходимо?
0
genrinew
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 5
19.05.2010, 15:16  [ТС] 4
Необходимость в удобстве при конвертировании в другой файл. Просто для удобства, тут можно и вручную.

p.s Ура! Заработало, симулятор копирования листа готов!
Полная версия, всем кому надо скопировать все ячейки:
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
 
using Excel = Microsoft.Office.Interop.Excel;
 
 Excel.Application excel = new Excel.Application();
    //выбор файла
    Excel.Workbook workbook = excel.Workbooks.Open(Application.StartupPath + "\\Ex.xls", 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);
    excel.Visible = true;
    Excel.Sheets sheets = workbook.Worksheets;
    //выбор листа для скачивания
    Excel.Worksheet mySheet = (Excel.Worksheet)sheets.get_Item("Лист1");
 
    int y, i; string s = null;
    int Row = mySheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row; //макс стока
    int Col = mySheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing).Column; //макс столбик
 
    Excel.Range r;
 
    for (i = 1; i < Row; i++)
    {
        for (y = 1; y < Col; y++)
        {
          r = ((Excel.Range)mySheet.Cells[i, y]);
          if (r.Value2 != null)
           s += r.Value2.ToString() + "\t";
      else
           s += "\t";
 
        }
        s = s + "\n\r";
    }
    MessageBox.Show(s);
Добавлено через 22 минуты
Только дата в виде кода копируется, а остальное норма.
0
mitsky
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
19.05.2010, 15:23 5
если я правильно понял .. то вроде как-то так:
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
        int _maxRow;
        int _maxCol;
 
        private Excel.Workbook OpenDocumentWorkbooks(Excel.Application oApplication)
        {
            Excel.Workbook oWorkbook = null;
            string filePath = @"D:\temp\temp.xls";
 
            try
            {
                oWorkbook = oApplication.Workbooks.Open(filePath, 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);
            }
            catch (Exception ex)
            {
                // write exception to log file.
            }
 
            return oWorkbook;
        }
 
        private Excel.Worksheet GetDocumentList(Excel.Application appl)
        {
            if (appl.Workbooks.Count > 0)
            {
                for (int bCount = 1; bCount <= appl.Workbooks.Count; bCount++)
                {
                    if (appl.Workbooks[bCount].Worksheets.Count > 0)
                    {
                        for (int sCount = 1; sCount <= appl.Workbooks[bCount].Worksheets.Count; sCount++)
                        {
                            _maxRow = ((Excel.Worksheet)appl.Workbooks[bCount].Worksheets.get_Item(sCount)).Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row;
                            _maxCol = ((Excel.Worksheet)appl.Workbooks[bCount].Worksheets.get_Item(sCount)).Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing).Column;
 
                            if ((_maxCol > 1) || (_maxRow > 1))
                            {
                                return (Excel.Worksheet)appl.Workbooks[bCount].Worksheets.get_Item(sCount);
                            }
                        }
                    }
                }
            }
            return null;
        }
 
        private Excel.Range GetNewDocRange(Excel.Worksheet wSheet, int minRow, int minCol, int maxRow, int maxCol)
        {
            return wSheet.get_Range(((Excel.Range)wSheet.Cells[minRow, minCol]).get_Address
                (true, true, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing),
                ((Excel.Range)wSheet.Cells[maxRow, maxCol]).get_Address
                (true, true, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing));
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application oApplication = new Excel.Application();
            Excel.Workbook oWorkbook = null;
            Excel.Worksheet oWorksheet = null;
 
            oWorkbook = OpenDocumentWorkbooks(oApplication);
            oWorksheet = GetDocumentList(oApplication);
            if (oWorksheet.Equals(null))
            {
                return;
            }
 
            string s = string.Empty;
 
            Excel.Range rng = GetNewDocRange(oWorksheet, 1, 1, _maxRow, _maxCol);
            foreach (Excel.Range r in rng)
            {
                if (r.Value2 != null)
                {
                    s = s + r.Value2.ToString() + "\n\r";
                }
                System.Runtime.InteropServices.Marshal.ReleaseComObject(r);
            }
 
            System.Runtime.InteropServices.Marshal.ReleaseComObject(rng);
            rng = null;
 
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oWorksheet);
            oWorksheet = null;
            oWorkbook.Close(null, null, null);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oWorkbook);
            oWorkbook = null;
            oApplication.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oApplication);
            oApplication = null;
            GC.Collect();
 
            MessageBox.Show(s);
        }
0
19.05.2010, 15:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2010, 15:23

Как задать соответствие одних значений, одного листа Excel, значениям другого листа Excel
Есть лист Excel ,значения в нем постоянны и находятся на одном месте (в одном...

Скопировать содержание input в буфер обмена.
Люди помогите нужен скрипт которые мог бы при нажатии на ссылку копировать...

Копировать в буфер гиперссылку
Добрый день! В некоторые документы мне нужно вставлять ссылки на письма в...


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

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

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