-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
1

Объединение нескольких файлов в один

04.07.2013, 19:06. Показов 6518. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Цитата Сообщение от TAVulator Посмотреть сообщение
Реализация той же задачи, но с применением сериализации:
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
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
 
namespace ConsoleApplication1
{
    [Serializable]
    public class FilesData //класс, содержащий файлы
    {
        [Serializable]
        public struct fi //структура класса
        {
            public string name; //имя файла
            public byte[] data; //содержимое файла
        }
        public readonly int count = 0; //количество файлов в классе
        public fi[] dataFi; // массив файлов
                
        public FilesData() { }
        public FilesData(string[] str) //конструктор класса
        {
            count = str.Length;
            fi[] K = new fi[count];
            foreach (string s in str)
            {
                count--;
                FileStream A = new FileStream(s, FileMode.Open, FileAccess.Read);
                BufferedStream B = new BufferedStream(A);
                K[count].name = s;
                K[count].data = new byte[B.Length];
                B.Read(K[count].data, 0, (int)B.Length);
                B.Close(); A.Close();
            }
            dataFi = K;
            count = str.Length;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            // пихаем все файлы в переменную (можно и больше двух файлов):
            FilesData d = new FilesData(new string[] { "D:\\!!!\\dataopen.bat", "D:\\!!!\\tym.mpf" });
            Console.WriteLine(d.count); //смотрим сколько файлов в d
            BinaryFormatter bf;
            FileStream fs;
            FilesData desObj;
 
            // Сериализуем - сохраняем данные в файл
            using (fs = new FileStream("D:\\!!!\\temp.dat", FileMode.Create))
            {
                bf = new BinaryFormatter();
                bf.Serialize(fs, d);
            }
            fs.Close();
            // Десериализуем - "распаковываем" файлы из файла
            using (fs = new FileStream("D:\\!!!\\temp.dat", FileMode.Open))
            {
                desObj = (FilesData)bf.Deserialize(fs);
            }
            fs.Close();
            Console.WriteLine(desObj.count); // опять смотрим сколько файлов в переменной после открытия из файла.
            foreach (FilesData.fi y in desObj.dataFi)
            {
                Console.WriteLine(y.name); // выводим имена файлов
                fs = new FileStream(y.name+"_", FileMode.Create, FileAccess.Write); // создаем новые файлы, дабавив _ на конце
                fs.Write(y.data, 0, y.data.Length); // переносим содержимое файла
                fs.Flush(); // записываем файл
                fs.Close();
            }
            Console.ReadKey();
        }
    }
}
Сам только учусь, так что на красоту исполнения не обращайте внимания.
Новичок я в сишарпе прям таки нуб в кратце, как это применить? у меня стала задача сделать программу для склеивания excel файлов (не 2 а более) в один файл, подскажите, буду благодарен, для связи ася форум
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2013, 19:06
Ответы с готовыми решениями:

Сведение нескольких PDF файлов в один
Привет всем! Тема такая - есть несколько загруженных на сервер pdf-файлов. По запросу клиента...

Объединение нескольких массивов byte[]
Доброго времени суток. Есть коллекция: SortedList<int, byte> dict = new SortedList<int, byte>();...

Объединение двух *.xls файлов
Здравствуйте, уважаемые формульчане! Возникла проблема с объдинением двух различных *.xls файлов....

EXE Joiner: объединение исполняемых файлов
Здравствуйте! Есть программа "program1.exe" и "program2.exe". Необходимо программно загрузить...

19
56 / 56 / 14
Регистрация: 06.04.2012
Сообщений: 185
04.07.2013, 21:46 2
Простым склеиванием файлы вряд-ли вы добьетесь склеивание экселей. Лучше смотрите в сторону microsoft.interop.excel
0
3 / 3 / 1
Регистрация: 19.09.2012
Сообщений: 43
05.07.2013, 09:01 3
Цитата Сообщение от nike00 Посмотреть сообщение
Простым склеиванием файлы вряд-ли вы добьетесь склеивание экселей. Лучше смотрите в сторону microsoft.interop.excel
У меня как раз была недавно задача выгрузки и загрузки в эксель, выгружаете в массив данные из всех файлов, и потом записываете их в 1 файл, как вариант, могу приложить свой код, может разберетесь)

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
 public static void ImportFromExcel(string path)
        {
            try
            {
                ObjExcel = new Microsoft.Office.Interop.Excel.Application();
                //Книга.
                ObjWorkBook = ObjExcel.Workbooks.Open(path);
                //Таблица.
                ObjWorkSheet = ObjExcel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
                //Ячейка
                Microsoft.Office.Interop.Excel.Range rg = null;
 
                Int32 row = 1;
                List<String> arr = new List<string>();
                while (ObjWorkSheet.get_Range("A" + row, "A" + row).Value != null)
                {
                    // Читаем данные из ячейки
                    rg = ObjWorkSheet.get_Range("a" + row, "f" + row);
                    foreach (Microsoft.Office.Interop.Excel.Range item in rg)
                    {
 
                        try
                        {
                            arr.Add(item.Value.ToString().Trim());
                        }
                        catch { arr.Add(""); }
 
                    }
                    AddItems.ActCollection.Add(new ReadyListBoxClass(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]));
                                                          //тут в массиве я чейки A1-A6, следующая интерация B1-B6 ит
д
                    arr.Clear();
                    row++;
                }                
                AddItems.SerializeActCollection("SerializeList.xml");
                MessageBox.Show("Файл успешно считан!", "Считывания excel файла");
            }
            catch (Exception ex) { MessageBox.Show("Ошибка: " + ex.Message, "Ошибка при считывании excel файла"); }
            finally
            {
                ObjWorkBook.Close(false, "", null);
                // Закрытие приложения Excel.
                ObjExcel.Quit();
                ObjWorkBook = null;
                ObjWorkSheet = null;
                ObjExcel = null;
                GC.Collect();
            }
        }
       
 
        static void ExportToExcel()
        {
            try
            {
                ObjExcel = new Microsoft.Office.Interop.Excel.Application();
                //Книга.
                ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);
                //Таблица.
                ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
 
                win.Dispatcher.BeginInvoke(new System.Action(() =>
                {
                    win._ProgressBar.Maximum = AddItems.ActCollection.Count;
                  win.ProgressTextBlock.Text = "Вствляем содержимое в ячейки...";
                }));
                int z = 0;
                bool? check = null;
                int? from = null;
                int? to = null;
                win.Dispatcher.Invoke(new System.Action(() =>
                {
                    if (win.ExportFrom.Text.Length > 0 && win.ExportTo.Text.Length > 0)
                    {
                        check = win.CheckExcelExport.IsChecked;
                        from = int.Parse(win.ExportFrom.Text);
                        to = int.Parse(win.ExportTo.Text);
                    }
                }));
                for (int i = 0; i < AddItems.ActCollection.Count; i++)
                {
                    var CollectionItem = AddItems.ActCollection[i]; // строки
                   
 
                    if ((check.HasValue) && (to.HasValue) && (from.HasValue) && (check == true) && (int.Parse(CollectionItem.PoryadokNum) >= from) && (int.Parse(CollectionItem.PoryadokNum) <= to))
                    {
                        ObjExcel.Cells[z + 1, 1] = AddItems.ActCollection[i].PoryadokNum;
                        ObjExcel.Cells[z + 1, 2] = AddItems.ActCollection[i].Number;
                        ObjExcel.Cells[z + 1, 3] = AddItems.ActCollection[i].SignDate;
                        ObjExcel.Cells[z + 1, 4] = AddItems.ActCollection[i].ActName;
                        ObjExcel.Cells[z + 1, 5] = AddItems.ActCollection[i].Rubriki;
                        ObjExcel.Cells[z + 1, 6] = AddItems.ActCollection[i].Keywordd;
                        AddItems.ActCollection[i].Check = true;
                        z++;
 
                        try
                        {
                            XElement elem = XElement.Load("SerializeList.xml");
                            foreach (XElement el in elem.Descendants("ReadyListBoxClass"))
                            {
                                if (int.Parse(el.Element("PoryadokNum").Value) == int.Parse(AddItems.ActCollection[i].PoryadokNum))
                                {
                                    el.Element("Check").SetValue("true");
                                }
                            }
                            elem.Save("SerializeList.xml");
                        }
                        catch (Exception ex) { MessageBox.Show(ex.Message); }
                       
                    
                    }
 
                    else if (CollectionItem.Check == false && CollectionItem.Keywordd.Length > 5 && CollectionItem.Rubriki.Length > 5)
                    {
                        ObjExcel.Cells[z + 1, 1] = AddItems.ActCollection[i].PoryadokNum;
                        ObjExcel.Cells[z + 1, 2] = AddItems.ActCollection[i].Number;
                        ObjExcel.Cells[z + 1, 3] = AddItems.ActCollection[i].SignDate;
                        ObjExcel.Cells[z + 1, 4] = AddItems.ActCollection[i].ActName;
                        ObjExcel.Cells[z + 1, 5] = AddItems.ActCollection[i].Rubriki;
                        ObjExcel.Cells[z + 1, 6] = AddItems.ActCollection[i].Keywordd;
                        AddItems.ActCollection[i].Check = true;
                        z++;
                        try
                        {
                            XElement elem = XElement.Load("SerializeList.xml");
                            foreach (XElement el in elem.Descendants("ReadyListBoxClass"))
                            {
                                if (int.Parse(el.Element("PoryadokNum").Value) == int.Parse(AddItems.ActCollection[i].PoryadokNum))
                                {
                                    el.Element("Check").SetValue("true");
                                }
                            }
                            elem.Save("SerializeList.xml");
                        }
                        catch (Exception ex) { MessageBox.Show(ex.Message); }
                        
                    }
                    }                                  
                Microsoft.Office.Interop.Excel.Range range = null;
                range = ObjWorkSheet.get_Range("A1", "F"+AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range1 = ObjWorkSheet.get_Range("A1", "A" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range2 = ObjWorkSheet.get_Range("B1", "B" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range3 = ObjWorkSheet.get_Range("C1", "C" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range4 = ObjWorkSheet.get_Range("D1", "D" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range5 = ObjWorkSheet.get_Range("E1", "E" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range6 = ObjWorkSheet.get_Range("F1", "F" + AddItems.ActCollection.Count);                
                range1.ColumnWidth = 7;
                range2.ColumnWidth = 12;
                range3.ColumnWidth = 11;
                range4.ColumnWidth = 56;
                range5.ColumnWidth = 46;
                range6.ColumnWidth = 25;
                range.RowHeight = 140;    
          
                win.ExcelExportTextBox.Dispatcher.Invoke(new System.Action(()=>{ObjWorkBook.SaveAs(win.ExcelExportTextBox.Text, XlFileFormat.xlAddIn8);}));
            }
            catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); }
            finally
            {
                {
                    ObjWorkBook.Close();
                    // Закрытие приложения Excel.
                    ObjExcel.Quit();
                    ObjWorkBook = null;
                    ObjWorkSheet = null;
                    ObjExcel = null;
                    GC.Collect();
                }
            }
 
        }
0
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
05.07.2013, 09:40  [ТС] 4
Ikaro, да я нуб еще каких тока поискать, но очень хочу выучить, просто дали работенку (сразу скажу она бесплатная, просто я взялся чтобы набрать опыта, да и программка должна быть не большой) , если вы дадите полное руководство, то буду благодарен Вам очень.
0
3 / 3 / 1
Регистрация: 19.09.2012
Сообщений: 43
05.07.2013, 13:19 5
Ну код разбирать целиком, это долго, могу несколько ссылок кинуть, я его с нуля тоже разбирал, за 5 часов вроде дошло все)
[Запрещены ссылки на сторонние форумы]
http://csharp.net-informations... torial.htm
Здесь очень подробно:
http://wladm.narod.ru/C_Sharp/comexcel.html
0
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
05.07.2013, 16:15  [ТС] 6
Кликните здесь для просмотра всего текста
Цитата Сообщение от Ikaro Посмотреть сообщение
У меня как раз была недавно задача выгрузки и загрузки в эксель, выгружаете в массив данные из всех файлов, и потом записываете их в 1 файл, как вариант, могу приложить свой код, может разберетесь)

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
 public static void ImportFromExcel(string path)
        {
            try
            {
                ObjExcel = new Microsoft.Office.Interop.Excel.Application();
                //Книга.
                ObjWorkBook = ObjExcel.Workbooks.Open(path);
                //Таблица.
                ObjWorkSheet = ObjExcel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
                //Ячейка
                Microsoft.Office.Interop.Excel.Range rg = null;
 
                Int32 row = 1;
                List<String> arr = new List<string>();
                while (ObjWorkSheet.get_Range("A" + row, "A" + row).Value != null)
                {
                    // Читаем данные из ячейки
                    rg = ObjWorkSheet.get_Range("a" + row, "f" + row);
                    foreach (Microsoft.Office.Interop.Excel.Range item in rg)
                    {
 
                        try
                        {
                            arr.Add(item.Value.ToString().Trim());
                        }
                        catch { arr.Add(""); }
 
                    }
                    AddItems.ActCollection.Add(new ReadyListBoxClass(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]));
                                                          //тут в массиве я чейки A1-A6, следующая интерация B1-B6 ит
д
                    arr.Clear();
                    row++;
                }                
                AddItems.SerializeActCollection("SerializeList.xml");
                MessageBox.Show("Файл успешно считан!", "Считывания excel файла");
            }
            catch (Exception ex) { MessageBox.Show("Ошибка: " + ex.Message, "Ошибка при считывании excel файла"); }
            finally
            {
                ObjWorkBook.Close(false, "", null);
                // Закрытие приложения Excel.
                ObjExcel.Quit();
                ObjWorkBook = null;
                ObjWorkSheet = null;
                ObjExcel = null;
                GC.Collect();
            }
        }
       
 
        static void ExportToExcel()
        {
            try
            {
                ObjExcel = new Microsoft.Office.Interop.Excel.Application();
                //Книга.
                ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);
                //Таблица.
                ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
 
                win.Dispatcher.BeginInvoke(new System.Action(() =>
                {
                    win._ProgressBar.Maximum = AddItems.ActCollection.Count;
                  win.ProgressTextBlock.Text = "Вствляем содержимое в ячейки...";
                }));
                int z = 0;
                bool? check = null;
                int? from = null;
                int? to = null;
                win.Dispatcher.Invoke(new System.Action(() =>
                {
                    if (win.ExportFrom.Text.Length > 0 && win.ExportTo.Text.Length > 0)
                    {
                        check = win.CheckExcelExport.IsChecked;
                        from = int.Parse(win.ExportFrom.Text);
                        to = int.Parse(win.ExportTo.Text);
                    }
                }));
                for (int i = 0; i < AddItems.ActCollection.Count; i++)
                {
                    var CollectionItem = AddItems.ActCollection[i]; // строки
                   
 
                    if ((check.HasValue) && (to.HasValue) && (from.HasValue) && (check == true) && (int.Parse(CollectionItem.PoryadokNum) >= from) && (int.Parse(CollectionItem.PoryadokNum) <= to))
                    {
                        ObjExcel.Cells[z + 1, 1] = AddItems.ActCollection[i].PoryadokNum;
                        ObjExcel.Cells[z + 1, 2] = AddItems.ActCollection[i].Number;
                        ObjExcel.Cells[z + 1, 3] = AddItems.ActCollection[i].SignDate;
                        ObjExcel.Cells[z + 1, 4] = AddItems.ActCollection[i].ActName;
                        ObjExcel.Cells[z + 1, 5] = AddItems.ActCollection[i].Rubriki;
                        ObjExcel.Cells[z + 1, 6] = AddItems.ActCollection[i].Keywordd;
                        AddItems.ActCollection[i].Check = true;
                        z++;
 
                        try
                        {
                            XElement elem = XElement.Load("SerializeList.xml");
                            foreach (XElement el in elem.Descendants("ReadyListBoxClass"))
                            {
                                if (int.Parse(el.Element("PoryadokNum").Value) == int.Parse(AddItems.ActCollection[i].PoryadokNum))
                                {
                                    el.Element("Check").SetValue("true");
                                }
                            }
                            elem.Save("SerializeList.xml");
                        }
                        catch (Exception ex) { MessageBox.Show(ex.Message); }
                       
                    
                    }
 
                    else if (CollectionItem.Check == false && CollectionItem.Keywordd.Length > 5 && CollectionItem.Rubriki.Length > 5)
                    {
                        ObjExcel.Cells[z + 1, 1] = AddItems.ActCollection[i].PoryadokNum;
                        ObjExcel.Cells[z + 1, 2] = AddItems.ActCollection[i].Number;
                        ObjExcel.Cells[z + 1, 3] = AddItems.ActCollection[i].SignDate;
                        ObjExcel.Cells[z + 1, 4] = AddItems.ActCollection[i].ActName;
                        ObjExcel.Cells[z + 1, 5] = AddItems.ActCollection[i].Rubriki;
                        ObjExcel.Cells[z + 1, 6] = AddItems.ActCollection[i].Keywordd;
                        AddItems.ActCollection[i].Check = true;
                        z++;
                        try
                        {
                            XElement elem = XElement.Load("SerializeList.xml");
                            foreach (XElement el in elem.Descendants("ReadyListBoxClass"))
                            {
                                if (int.Parse(el.Element("PoryadokNum").Value) == int.Parse(AddItems.ActCollection[i].PoryadokNum))
                                {
                                    el.Element("Check").SetValue("true");
                                }
                            }
                            elem.Save("SerializeList.xml");
                        }
                        catch (Exception ex) { MessageBox.Show(ex.Message); }
                        
                    }
                    }                                  
                Microsoft.Office.Interop.Excel.Range range = null;
                range = ObjWorkSheet.get_Range("A1", "F"+AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range1 = ObjWorkSheet.get_Range("A1", "A" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range2 = ObjWorkSheet.get_Range("B1", "B" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range3 = ObjWorkSheet.get_Range("C1", "C" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range4 = ObjWorkSheet.get_Range("D1", "D" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range5 = ObjWorkSheet.get_Range("E1", "E" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range6 = ObjWorkSheet.get_Range("F1", "F" + AddItems.ActCollection.Count);                
                range1.ColumnWidth = 7;
                range2.ColumnWidth = 12;
                range3.ColumnWidth = 11;
                range4.ColumnWidth = 56;
                range5.ColumnWidth = 46;
                range6.ColumnWidth = 25;
                range.RowHeight = 140;    
          
                win.ExcelExportTextBox.Dispatcher.Invoke(new System.Action(()=>{ObjWorkBook.SaveAs(win.ExcelExportTextBox.Text, XlFileFormat.xlAddIn8);}));
            }
            catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); }
            finally
            {
                {
                    ObjWorkBook.Close();
                    // Закрытие приложения Excel.
                    ObjExcel.Quit();
                    ObjWorkBook = null;
                    ObjWorkSheet = null;
                    ObjExcel = null;
                    GC.Collect();
                }
            }
 
        }


А этот вариант не подойдет? я так понял мне останется только форму прикрутить и связать. Напишите мне в лс или в профиле есть данные для связи, я не смог найти ваши данные.
0
3 / 3 / 1
Регистрация: 19.09.2012
Сообщений: 43
05.07.2013, 22:50 7
Ладно, постараюсь тут объяснить)
C#
1
 while (ObjWorkSheet.get_Range("A" + row, "A" + row).Value != null)
читаем пока в стобце А не попадется пустая ячейка
C#
1
rg = ObjWorkSheet.get_Range("a" + row, "f" + row);
выбираем диапазон ячеек для чтения, у меня здесь от А до F
C#
1
arr.Add(item.Value.ToString().Trim());
добавляем найденный ячейки (одна строка целиком А-F) в массив
C#
1
AddItems.ActCollection.Add(new ReadyListBoxClass(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]));
здесь arr[0] это A, arr[5] это F

Функция экспорта сделана в бэкграундворкере, + там есть XElement, его можете выкинуть, упростить если схематично, то как-то так:
C#
1
2
3
4
5
6
7
8
9
                ObjExcel = new Microsoft.Office.Interop.Excel.Application();
                //Книга.
                ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);
                //Таблица.
                ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
for (int i = 0; i < AddItems.ActCollection.Count; i++)
                {
                    var CollectionItem = AddItems.ActCollection[i]; // строки
                                               //это моя коллекция ObservableCollection

тут данные добавляются в ячейку у меня соответвенно из коллекции
C#
1
2
3
4
5
6
  ObjExcel.Cells[i + 1, 1] = AddItems.ActCollection[i].PoryadokNum;
                       ObjExcel.Cells[i + 1, 2] = AddItems.ActCollection[i].Number;
                        ObjExcel.Cells[i + 1, 3] = AddItems.ActCollection[i].SignDate;
                        ObjExcel.Cells[i + 1, 4] = AddItems.ActCollection[i].ActName;
                        ObjExcel.Cells[i + 1, 5] = AddItems.ActCollection[i].Rubriki;
                        ObjExcel.Cells[i + 1, 6] = AddItems.ActCollection[i].Keywordd;
тут я делаю переменные с ячейками от A до F для последующего форматирования
C#
1
2
3
4
5
6
7
8
Microsoft.Office.Interop.Excel.Range range = null;
                range = ObjWorkSheet.get_Range("A1", "F"+AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range1 = ObjWorkSheet.get_Range("A1", "A" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range2 = ObjWorkSheet.get_Range("B1", "B" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range3 = ObjWorkSheet.get_Range("C1", "C" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range4 = ObjWorkSheet.get_Range("D1", "D" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range5 = ObjWorkSheet.get_Range("E1", "E" + AddItems.ActCollection.Count);
                Microsoft.Office.Interop.Excel.Range range6 = ObjWorkSheet.get_Range("F1", "F" + AddItems.ActCollection.Count);
здесть для каждого ренджа меняю ширину ячейки, можете добавить
C#
1
range1.WrapText = true для
автопереноса текста в ячейке
C#
1
2
3
4
5
6
7
range1.ColumnWidth = 7;
                range2.ColumnWidth = 12;
                range3.ColumnWidth = 11;
                range4.ColumnWidth = 56;
                range5.ColumnWidth = 46;
                range6.ColumnWidth = 25;
                range.RowHeight = 140;
ну и сохраняете :
C#
1
2
ObjWorkBook.SaveAs("имя файла", XlFileFormat.xlAddIn8)
                                                                           //формат, а данном случае 97-2004 excel
ничего особо сложного, но если вам не понятно, то начинайте с чего попроще, конечно, если вы только начали, то это сложновато будет.
P.S. последняя ссылка что я вам давал, очень подробно все объясняет, я сам все это по тому материалу писал.
1
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
07.07.2013, 15:20  [ТС] 8
Ikaro, Пожалуйста напиши мне в приват или в профиле есть данные для связи, я по некоторым работам делал и не получилось, у меня даже офиса не было я ели нашел длльку, плюс хтел просто сделать склейку например из 10 екселев в 1 ексель
0
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
09.07.2013, 16:10  [ТС] 9
Почему при открытии одного файла он открывается нормально (программно), а при другом который заполнен он не открывает вообще
0
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
08.08.2013, 18:07  [ТС] 10
привет! код выше де полный исходник по склеиванию файлов хороший рабочий, но я столкнулся с такой проблемой мне необходимо склеить ексель файлы в один файл помогите плиз

 Комментарий модератора 
Сообщения перенесены из темы Объединение n файлов в один
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
08.08.2013, 18:09 11
Допустим что поможем. но надо уточнять как соединять.
добавлять их как новые листы или все лепить в один?
0
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
08.08.2013, 18:23  [ТС] 12
Цитата Сообщение от Konctantin Посмотреть сообщение
Допустим что поможем. но надо уточнять как соединять.
добавлять их как новые листы или все лепить в один?
а что легче , или оба варианта дайте я я просиатрю что легче
0
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
22.08.2013, 16:15  [ТС] 13
А как насчет ЕКСЕЛЬ файлов? ооочень нужно
0
мастер топоров
916 / 741 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
22.08.2013, 16:23 14
мне кажется, что для того, чтобы объединить несколько файлов *.xls нужно подключить библиотеку для работы с ними, получить коллекции колонок, объединить их и полученное множество сохранить в новый файл. кажется, я встречался с библиотекой для работы с этими файлами
если же там обычные *.csv, то можно посмотреть на их структуру, распарсить и сохнарить в один общий файл
0
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
22.08.2013, 16:27  [ТС] 15
Koran, Мне надо объединить практически одинаковые по колонкам ексель файлы *.xls про библиотеку я знаю наверное имели ввиду про Microsoft.Office.Interop.Excel
0
мастер топоров
916 / 741 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
22.08.2013, 16:28 16
CoMMoN86, да, скорее всего я говорил о ней
0
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
22.08.2013, 16:36  [ТС] 17
Koran, А не могли бы Вы предоставить код на склеивание этих файлов? я уже провел все работы по екселю мне нужна только функция, сам я новичок в сишарпе и уже 2 месяца не могу решить проблему, был бы благодарен за функцию склеивания.
0
мастер топоров
916 / 741 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
22.08.2013, 16:42 18
CoMMoN86, а я уже года два как не пишу на шарпе, функцию склеивания написать вот так сходу не могу и не имею желания. примерный алгоритм работы я привел выше - далее уже дело техники
0
-5 / 5 / 1
Регистрация: 18.05.2013
Сообщений: 503
22.08.2013, 16:48  [ТС] 19
Koran, Проблема в том что я нуб в сишарпе и не смогу сделать программу или функцию без реального примера, мне бы код, просто два месяца парился и ни как не могу , все проблемы решил но эту ни как не могу
0
16 / 12 / 4
Регистрация: 28.09.2015
Сообщений: 278
22.05.2017, 08:05 20
Так по итогу, получилось ?
0
22.05.2017, 08:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2017, 08:05
Помогаю со студенческими работами здесь

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

Сериализация нескольких объектов в один файл
Функция сериализуeт в xml,но ее я вызываю несколько раз ,как сделать ,чтобы инфа из xml не...

Сериализация нескольких списков в один файл
Имеется несколько списков: public static List&lt;Photo&gt; photos = new List&lt;Photo&gt;(); public...

Сереализация нескольких объектов разных типов в один файл
Имеются 3 списка разных типов. List &lt;A&gt; obj1, List&lt;B&gt; obj2 , List&lt;C&gt; obj3. BinaryFormatter...


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

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

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