Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/244: Рейтинг темы: голосов - 244, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 14.06.2009
Сообщений: 29

Сохранение данных в Excel файл

26.08.2009, 13:45. Показов 44696. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу прогу и тут надобность возникла в выгрузке данных в EXCEL файл. Есть ли у кого примеры кода или програмулинки где подсматреть можно...
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.08.2009, 13:45
Ответы с готовыми решениями:

Re: Сохранение данных в Excel файл
Подскажите как получить информацию сколько срок в эксель файле заполнены, чтобы знать с какой строки начать добавление записей. Или просто...

Сохранение данных в файл excel
Есть такая задача: необходимо данные вводимые пользователями сайта в 5 форм, сохранялись на сервер в формат excel соответственно в 5...

Сохранение всех данных из Listview в файл Excel
Подскажите пожалуйста как все данные из Listview (3 items) сохранять в отдельный файл ексель? Нашел в сети такой код: Private Sub...

26
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
26.08.2009, 14:06
вот побыстрому набросана прога
ЗЫ. процес ексель не закрывается пока. потом когда начну доделывать кину исправления
Вложения
Тип файла: rar TEST_CSharp_Excel_.rar (22.2 Кб, 1141 просмотров)
1
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
15.09.2009, 07:33
Сделал как в примере M128K145, компилятор ругается на строчку
C#
1
using Excel = Microsoft.Office.Interop.Excel;
следующими словами :
C#
1
Имя типа или пространства имен "Office" отсутствует в пространстве имен "Microsoft" (пропущена ссылка на сборку?)
и подчеркивает красным слово Office.
Что-то здесь не так? У меня VisualStudio 2008 Express Edition/
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
15.09.2009, 08:10
Нужно добавить в Reference Microsoft.Office
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
15.09.2009, 09:08
вот путь к этой dll-ке \Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12
0
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
15.09.2009, 12:28
У меня нет такой папки \Visual Studio Tools for Office. А как конкретно называется файл библиотеки, может через поиск найду.

Добавлено через 46 минут
Как я выяснил, в VisualStudio 2008 Express Edition нет поддержки работы с Microsoft Office.
А можно эти библиотеки где-нибудь достать отдельно и прикрутить вручную (например через те же Reference?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
15.09.2009, 14:58
В аттаче. Попробуй просто её прикрутить через References. Если не поможет, то ищи полную версию студии
Вложения
Тип файла: rar Microsoft.Office.Interop.Excel.rar (212.7 Кб, 766 просмотров)
1
1 / 1 / 0
Регистрация: 15.09.2009
Сообщений: 7
15.09.2009, 16:12
Посмотри http://www.gotdotnet.ru/LearnD... 22054.aspx

Добавлено через 1 минуту
Еще желательно "прикручивать" Net библиотеку а не COM

Добавлено через 2 минуты
У меня из-за этого не было переносимости на компы где при установке Office не было установка возможности програмирования под .Net
1
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
15.09.2009, 18:33
Библиотека прикрутилась, спасибо, компилятор пока больше не ругается. Подробнее поковыряюсь завтра, у нас с вами большая разница во времени.
Информацию по ссылке тоже просмотрю завтра, если будут непонятки - напишу в этой же теие.
0
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
16.09.2009, 06:23
Для M128K145
Для работы с диалоговыми окнами открытия/сохранения файлов необходима ссылка на пространство имен
C#
1
using Office = Microsoft.Office.Core;
Нельзя ли выложить еще и эту библиотеку для подключения. VS 2008 Pro я в И-нете нашел, но он DVD, а у меня скорость не очень большая, поэтому тянуть его целиком с Рапидшары очень долго. К тому же он порезан на 30 с лишним частей - одной части не будет - и кирдык. А на Рапидшаре такое не редкость.
Просто не хочется жестко прописывать путь в программе для открываемого и для сохраняемого Excel-файла.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
16.09.2009, 07:47
А чем не устраивают стандартные компоненты OpenFileDialog и SaveFileDialog?
1
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
16.09.2009, 08:56
Наверное тем, что я до них еще не добрался. Я начинаю искать информацию, что первое попадется попонятней - то и пытаюсь использовать. OpenFileDialog и SaveFileDialog мне просто еще не попадались. Попробую.
1
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
16.09.2009, 12:52
OpenFileDialog почему-то категорически не хочет открываться. Т.е. окно открытия файла не появляется, запускается Excel и все тупо виснет. Просмотрел и попробовал разные варианты, но результат тот же. Открытие файла происходит из формы при обработке нажатия кнопки ОК.
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
16.09.2009, 20:31
покажи код
1
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
17.09.2009, 04:45
Примерно так

C#
1
2
3
4
5
6
OpenFileDialog otkr = new OpenFileDialog(); 
otkr.InitialDirectory = "c:\\"; 
otkr.Filter = ""; otkr.FilterIndex = 2; 
otkr.RestoreDirectory = true; 
if (otkr.ShowDialog() == DialogResult.OK)   str1 = otkr.FileName);   
.....


После if я пробовал разные варианты, но результата два: либо открывается пустой Excel и вместо появления окна запроса на открытие файла активным становится окно формы, из которой все это запускается, либо не происходит вообще ничего и все виснет.

Добавлено через 8 минут
Раньше я использовал такую конструкцию:

C#
1
2
3
4
5
6
7
8
9
10
[FONT=monospace]Excel::Application excelAplication = new Excel.Application(); 
excelAplication.Visible = true;  
Excel::Workbook excelBook = excelAplication.Workbooks.Open("c:\\Temp\\Шаблон.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); 
// сохранение шаблона под другим именем, чтобы не испортить исходный файл excelAplication.ActiveWorkbook.SaveAs("Расчет постава.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
Excel::Sheets excelSheet = excelBook.Worksheets; 
Excel::Worksheet excelWorksheet = (Excel::Worksheet)excelSheet.get_Item("Сырье"); // заполнение рабочего листа ланными из dataGridView 
excelWorksheet.Cells[1, 3] = Sort1.Text; 
excelWorksheet.Cells[1, 5] = Sort2.Text; 
и т.д.  
[/FONT]
и все прекрасно работало, но не устраивает жесткая привязка файла шаблона к определенному месту, хотелось бы, чтобы его можно было размещать в любом месте и открывать через OpenFile Dialog или что-то подобное.
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
17.09.2009, 08:40
А так?
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
private void button1_Click(object sender, EventArgs e)
{
    
    Excel.Application xlApp = new Excel.Application();
    openFileDialog1.Filter = "Excel files(*.xls)|*.xls";
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        Excel.Workbook oSheet = xlApp.Workbooks.Open(openFileDialog1.FileName, 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);
        xlApp.Workbooks.Add(Type.Missing);
        xlApp.Interactive = false;
        xlApp.EnableEvents = false;
        if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
        {
            oSheet.SaveAs(folderBrowserDialog1.SelectedPath + @"\excel.xls", 
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            oSheet = null;
            xlApp.Interactive = true;
            xlApp.ScreenUpdating = true;
            xlApp.UserControl = true;
            xlApp = null;
        }
    }
}


Не по теме:

используй теги кода

2
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
17.09.2009, 10:24
Спасибо, заработало. Только folderBrowserDialog в моем варианте VS 2008 EE отсутствует, пришлось заменить на SaveFileDialog, да oSheet = null; и xlApp = null; мне здесь не нужны, они нужны в конце программы, чтобы убить Excel-процесс, который висит в процессах после закрытия Excel (если я правильно понимаю их назначение). И еще xlApp.Workbooks.Add(Type.Missing); - это не надо, создает пустую рабочую книгу, а у нас ведь уже есть открытый файл.
В общем получилось вот так:
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
public void Ok_Click(object sender, EventArgs e)
{
    Excel.Application xlApp = new Excel.Application();
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
    openFileDialog1.Filter = "Excel files(*.xls)|*.xls";
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        Excel.Workbook oSheet = xlApp.Workbooks.Open(openFileDialog1.FileName, 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);
        xlApp.Interactive = false;
        xlApp.EnableEvents = false;
        SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
        SaveFileDialog1.Filter = "Excel files(*.xls)|*.xls";
        if (SaveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            oSheet.SaveAs(SaveFileDialog1.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            xlApp.Interactive = true;
            xlApp.ScreenUpdating = true;
            xlApp.UserControl = true;
        }
        xlApp.Visible = true; // это для контроля правильного заполнения рабочих листов на
                                   // время отладки, потом уберу
        Excel::Sheets excelSheet = oSheet.Worksheets;
        // переход на лист "Сырье"
        Excel::Worksheet excelWorksheet = (Excel::Worksheet)excelSheet.get_Item("Сырье");
        // далее идет перенос данных из формы в рабочий лист
        .......
    }
}
Добавлено через 3 минуты
А теги кода у меня в Опере почему-то периодически перестают работать. Поддержка Java и JavaScript включена, но увы. Но этим я займусь попозже, может Мозиллу поставлю, может Оперу обновлю - там видно будет.
2
zerkms
09.10.2009, 07:54
господа, разбираю ваши примеры. всё чудесно, но не могу понять одной вещи:

C#
1
2
3
Excel.Application xlApp = new Excel.Application();
xlApp.Workbooks.Close();
xlApp = null;
Программа с таким кодом зачем-то пытается установить соединение на 80 порт с 92.123.155.25.
Зачем? Я как-то неправильно пытаюсь деплоить программу?
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
20.07.2010, 11:25
Еще появился запоздалый вопрос.
При выполнении сохранения Excel-файла в программе C# по вот такой команде:
C#
1
xlApp.ActiveWorkbook.SaveAs("Расчет постава.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
выскакивает окно с сообщением о существовании некоего промежуточного файла "1.xlw" и необходимости его заменить. Какой из Type.Missing-ов необходимо заменить и на что, чтобы файл сохранялся под тем же именем и в том же месте без дополнительных вопросов?
И вообще, может кто-нибудь конкретно написать или дать ссылку, какой из параметров данной команды за что отвечает и какие имеет значения? В И-нете такой информации найти не смог. Буду очень благодарен.
1
8 / 8 / 1
Регистрация: 20.07.2010
Сообщений: 22
20.07.2010, 11:56
Лучший ответ Сообщение было отмечено как решение

Решение

Советую попробовать выгрузку в CSV файл. 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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/// <summary>
    /// Экспорт/Импорт в CSV формат
    /// </summary>
    public static class CSV
    {
        private static char separator = ';';
        /// <summary>
        /// Загрузка данных из CSV файла
        /// </summary>
        /// <param name="fileName">Имя файла</param>
        /// <param name="first_row_is_column_name">Указывает что первая строка файла содержит имена столбцов</param>
        /// <returns></returns>
        public static DataTable ImportFromCSV(string fileName, bool first_row_is_column_name)
        {
            DataTable ret = new DataTable();
            TextReader tr = new StreamReader(fileName, Encoding.GetEncoding(1251));
            String line = "";
            line = tr.ReadLine();
            string[] columns = line.Split(separator);
            for (int i = 0; i < columns.Length; i++)
                if (first_row_is_column_name)
                    ret.Columns.Add(columns[i]);
                else
                    ret.Columns.Add("column_" + i.ToString());
            if (first_row_is_column_name)
                line = tr.ReadLine();
            while (line != null)
            {
                string[] blocks = line.Split(separator);
                DataRow dr = ret.NewRow();
                for (int i = 0; i < (blocks.Length & ret.Columns.Count); i++)
                {
                    dr["column_" + i.ToString()] = blocks[i];
                }
                ret.Rows.Add(dr);
                line = tr.ReadLine();
            }
            return ret;
        }
        /// <summary>
        /// Выгрузка в CSV файл
        /// </summary>
        /// <param name="fileName">Имя файла</param>
        /// <param name="table">Таблица для выгрузки</param>
        /// <returns></returns>
        public static bool ExportToCSV(string fileName, DataTable table)
        {
            if (table != null)
            {
                FileStream fs = null;
                try
                {
                    fs = File.OpenWrite(fileName);
                }
                catch
                {
                    return false;
                }
                using (TextWriter tw = new StreamWriter(fs, Encoding.GetEncoding(1251)))
                {
                    String line = "";
                    //Выводим имя таблицы
                    if (!String.IsNullOrEmpty(table.TableName))
                        tw.WriteLine(table.TableName);
                    //Вывод названий столбцов
                    foreach (DataColumn colName in table.Columns)
                    {
                        line += String.Format("\"{0}\"{1}", colName.ColumnName, separator);
                    }
                    tw.WriteLine(line.TrimEnd(separator));
                    //Вывод данных
                    foreach (DataRow dr in table.Rows)
                    {
                        line = "";
                        Array.ForEach(dr.ItemArray, obj => line += String.Format("\"{0}\"{1}", obj, separator));
                        tw.WriteLine(line.TrimEnd(separator));
                    }
                }
                fs.Close();
                fs.Dispose();
                return true;
            }
            return false;
        }
    }
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2010, 11:56
Помогаю со студенческими работами здесь

Сохранение данных из базы access в файл excel
Всем доброго времени суток! имеется база в которой 5 полей, условно назовем их Catalog, ID_1, ID_2, File_Name, Name

Перенос данных в Excel-файл и сохранение в pdf формате
Как с аксеса открыть ексель файл, заполнить его и сохранить в pdf формате? Во вложении файл аксес. Как с поля 8 на форме данные...

Сохранение в закрытый файл Excel
Есть книги с именем ИТОГИ.xls, Расходы.xls, Доходы.xls, Ванк.xls. Подскажите пожалуйста как сохранить данные из книг Расходы.xls,...

Сохранение таблицы в файл excel
Здравствуйте! Прошу помощи в доработке кода, который сохраняет таблицу в файл excel.. Данный код выполняется когда таблица уже...

Сохранение данных в Excel
Доброго времени суток. В программе выполняется расчет, есть куча данных типа float. Как можно сформировать из них таблицы Excel?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru