Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
 
Cha1000000
2 / 2 / 1
Регистрация: 04.06.2015
Сообщений: 103
Записей в блоге: 1
#1

Сохранение/чтение/работа с файлами Excel без вызова СОМ (альтернативные методы) - C#

11.05.2017, 09:35. Просмотров 484. Ответов 16
Метки нет (Все метки)

Добрый день, коллеги!
Столкнулся с такой проблемой: в проекте Windows Forms реализовал сохранение в 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
using Excel = Microsoft.Office.Interop.Excel;
 
namespace KKM_ProgBase_Utility
{
    public partial class fm_Main : Form
    {
        private Excel.Application ExcelApp;
        private Excel.Range excelcells;
 
        public fm_Main()
        {
            InitializeComponent();
        }
        
        private void mi_SaveToExcel_Click(object sender, EventArgs e)
        {//Сохранение в файлы Excel
            int i, j;
            saveTags.Title = "Экспорт в файл Excel";
            saveTags.Filter = "Файл Excel (*.xls) | *.xls |Файл Excel (*.csv) |*.csv";
 
            if (saveTags.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    Excel.Application ExcelApp = new Excel.Application();
                    Excel.Workbook workbook = ExcelApp.Workbooks.Add(Type.Missing);
                    Excel.Worksheet worksheet = workbook.ActiveSheet;
                    //Заголовок таблицы
                    for (j = 0; j < ProgTable.ColumnCount; j++)
                        ExcelApp.Cells[1, j + 1] = ProgTable.Columns[j].HeaderText;
                    //Данные
                    for (i = 0; i < ProgTable.Rows.Count; i++)
                    {
                        for (j = 0; j < ProgTable.ColumnCount; j++)
                        {
                            ExcelApp.Cells[i + 2, j + 1] = ProgTable.Rows[i].Cells[j].Value;
                        }
                    }
                    //////
                    ExcelApp.AlertBeforeOverwriting = false;
                    ExcelApp.DisplayAlerts = false; //Не запрашивать сохранение
                    //сохранение в .xls
                    if (saveTags.FilterIndex == 1)
                        ExcelApp.DefaultSaveFormat = Excel.XlFileFormat.xlExcel9795;
                    //сохранение в .csv
                    if (saveTags.FilterIndex == 2)
                        ExcelApp.DefaultSaveFormat = Excel.XlFileFormat.xlCSV;
                    //Установка типов данных и формат ячеек
                    excelcells = (Excel.Range)worksheet.Columns["C", Type.Missing];
                    excelcells.NumberFormat = "#####0";
                    //Cохранение файла
                    workbook.SaveAs(saveTags.FileName, ExcelApp.DefaultSaveFormat);
                    ExcelApp.Quit();
                }
                catch (Exception ex)
                {
                    //Обработка сбоя
                    ExcelApp.Quit();
                }
            }
        }
    }
}
Если на ПК установлен MS Office то этот код работает и всё хорошо сохраняет... Но! Есть такой нюанс: пробовал сохранить в Ексель-файл на компе, где Microsoft Office не установлен, либо стоит альтернативный офис типа Либры или OpenOffice... И такая конструкция уже не срабатывает!(( Выдает ошибки, что типа COM не зарегистрирован в системе и всё такое...
Отсюда у меня вопрос: как можно реализовать сохранение/открытие в/из файлов Ексель на форму программы, без вызова СОМ ну или каким-то образом, что бы привязок к Меклкософтовскому офису на ПК не было?
Заранее спасибо за помощь!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2017, 09:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сохранение/чтение/работа с файлами Excel без вызова СОМ (альтернативные методы) (C#):

Сохранение картинки без вызова диалогового окна - C#
подскажите как сохранить измененную картинку? при всех попытках вызывается диалоговое окно, где нужно указать путь, имя и формат а...

Работа с файлами (чтение из файла) - C#
Кто-нибудь может помочь с заданием: В исходном текстовом файле подготовить данные о программе телепередач одного телевизионного канала на...

Работа с файлами. Пространство имён не может напрямую включать поля или методы - C#
Задание. Разработать программу Телефонный справочник, которая позволяет накапливать данные о контактах в текстовом файле. Читать записи из...

C# и работа с Excel файлами - C#
Доброе время суток! Меня зовут Павел, я пытаюсь освоить и в дальнейшем использовать Microsoft Visual Studio 2008. В данный момент у...

Работа с файлами Excel - C#
Здравствуйте! Нужен Ваш совет. Столкнулся с задачей обработки данных из Excel'евского файла: приходит файлик, приложение его корректирует...

Работа с Excel файлами - C#
Всем привет! Есть такой очень важный вопрос для меня... У меня есть файл xls, который я приложил к теме... У меня программа вычисляет день...

16
Павлик Морозов
113 / 115 / 23
Регистрация: 26.10.2012
Сообщений: 382
Завершенные тесты: 1
30.05.2017, 21:03 #16
Cha1000000, здорово что у Вас получилось самостоятельно решить проблему) Единственное, на мой взгляд, поскольку у Вас есть уже экземпляр Stream при создании файла, то в него и пишите содержимое файла. Не вижу смысла одним потоком создавать файл, другим редактировать
0
Cha1000000
2 / 2 / 1
Регистрация: 04.06.2015
Сообщений: 103
Записей в блоге: 1
31.05.2017, 15:12  [ТС] #17
Цитата Сообщение от Павлик Морозов Посмотреть сообщение
в него и пишите содержимое файла
Да, об этом я тоже думал, оставил на потом. Просто пока не рассматривал как вместо FileStream подсунуть воркбуку Stream. Вот как раз сейчас буду смотреть, а если не получится, обращусь ;-) Спасибо!

Добавлено через 3 часа 18 минут
Всё получилось! Оказывается метод .Write(...) и принимает параметр типа Stream, я просто сразу не обратил на это внимания. Вот только теперь мне интересно, а как же он тогда проглатывал переменную var fs = new FileStream(File_Name, FileMode.Open, FileAccess.Write) c типом FileStream ? Не потому ли, что она типа var и от этого может как хамелеон подгонять свой тип данных под различные "условия"?
0
31.05.2017, 15:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2017, 15:12
Привет! Вот еще темы с ответами:

Чтение данных из сом по событию - C#
Как реализовать чтение данных из порта только в том случае, если в его буфере появились данные?

Как сделать паузу без подвисания и без вызова Sleep? - C#
Здравствуйте, как можно сделать паузу без &quot;второго&quot; потока и вешания программы посредством System.Threading.Thread.Sleep? ...

Работа с excel без установленного Офиса - C#
Доброго времени суток. Подскажите пожалуйста библиотеку для работы с excel ( экспорт данных в xls файлы) без установленного офиса. Хорошо...

Работа с Excel 2007 без установленного MS Office - C#
Здравствуйте. вопрос такой: на компе не установлен Excel 2007, прога работает с Interop ver.12 работа с файлами 2003 проходит на ура,...


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

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

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