Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2012, 00:56   #1
unijkoder
Пользователь
 
Регистрация: 21.01.2012
Сообщений: 37
По умолчанию Excel и С#

Здравствуйте! Есть проблема.
Программа по нажатию кнопки на форме, должна считать файл Excel и поместить данные в датагрид на форме. Проблема в том, что в датагрид записывается только 3 столбца из 20...30. Как решить?
Вот код обработчика кнопки:
Код:
 private void buttonImport_Click(object sender, EventArgs e)
        {
            OpenFileDialog openDialog = new OpenFileDialog();
            openDialog.Filter = "Файл Excel|*.XLSX;*.XLS";
            openDialog.ShowDialog();

            try
            {
                ObjExcel = new Microsoft.Office.Interop.Excel.Application();
                //Книга.
                ObjWorkBook = ObjExcel.Workbooks.Open(openDialog.FileName);
                //Таблица.
                ObjWorkSheet = ObjExcel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
                Microsoft.Office.Interop.Excel.Range rg = null;

                Int32 row = 1;
                dataGridViewMain.Rows.Clear();
                List<String> arr = new List<string>();
                while (ObjWorkSheet.get_Range("a" + row, "a" + row).Value != null)
                {
                    // Читаем данные из ячейки
                    rg = ObjWorkSheet.get_Range("a" + row, "c" + row);
                    foreach (Microsoft.Office.Interop.Excel.Range item in rg)
                    {
                        try
                        {
                            arr.Add(item.Value.ToString().Trim());
                        }
                        catch { arr.Add(""); }
                    }
                    dataGridViewMain.Rows.Add(arr[0], arr[1], arr[2]);
                    arr.Clear();
                    row++;
                }

                MessageBox.Show("Файл успешно считан!", "Считывания excel файла", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex) { MessageBox.Show("Ошибка: " + ex.Message, "Ошибка при считывании excel файла", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            finally
            {
                ObjWorkBook.Close(false, "", null);
                // Закрытие приложения Excel.
                ObjExcel.Quit();
                ObjWorkBook = null;
                ObjWorkSheet = null;
                ObjExcel = null;
                GC.Collect();
            }

            this.Text = this.Text + " - " + openDialog.SafeFileName;
            textBoxFileName.Text = openDialog.SafeFileName;
        }
unijkoder вне форума Ответить с цитированием
Старый 29.06.2012, 18:13   #2
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Цитата:
rg = ObjWorkSheet.get_Range("a" + row, "c" + row);
это как я понимаю считать первую - третью колонку
Reskov вне форума Ответить с цитированием
Старый 29.06.2012, 19:53   #3
unijkoder
Пользователь
 
Регистрация: 21.01.2012
Сообщений: 37
По умолчанию

Если поставить:


rg = ObjWorkSheet.get_Range("a" + row, "d" + row);

Ничего не меняется - 3 столбца.
unijkoder вне форума Ответить с цитированием
Старый 29.06.2012, 20:10   #4
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Код:
 dataGridViewMain.Rows.Add(arr[0], arr[1], arr[2]);
тут тоже исправили?
Reskov вне форума Ответить с цитированием
Старый 29.06.2012, 20:16   #5
unijkoder
Пользователь
 
Регистрация: 21.01.2012
Сообщений: 37
По умолчанию

Да, добавил арр3.
unijkoder вне форума Ответить с цитированием
Старый 29.06.2012, 20:18   #6
unijkoder
Пользователь
 
Регистрация: 21.01.2012
Сообщений: 37
По умолчанию

Вот вся прога. тут 2 кнопки:импорт, экспорт.

Код:
namespace Excel
{
    public partial class Form1 : Form
    {
        private Microsoft.Office.Interop.Excel.Application ObjExcel;
        private Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
        private Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
        private string fileName;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void buttonExport_Click(object sender, EventArgs e)
        {
            fileName = System.Windows.Forms.Application.StartupPath + "\\" + textBoxFileName.Text + ".xlsx";
            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];

                for (int i = 0; i < dataGridViewMain.Rows.Count; i++)
                {
                    DataGridViewRow row = dataGridViewMain.Rows[i]; // строки

                    for (int j = 0; j < row.Cells.Count; j++) //цикл по ячейкам строки
                    {
                        ObjExcel.Cells[i + 1, j + 1] = row.Cells[j].Value;
                    }
                }

                ObjWorkBook.SaveAs(fileName);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message, "Error");}
            finally 
            {
                {
                    ObjWorkBook.Close();
                    // Закрытие приложения Excel.
                    ObjExcel.Quit();
                    ObjWorkBook = null;
                    ObjWorkSheet = null;
                    ObjExcel = null;
                    GC.Collect();
                }
            }
            this.Text = this.Text + " - " + textBoxFileName.Text + ".xlsx";
        }

        private void buttonImport_Click(object sender, EventArgs e)
        {
            OpenFileDialog openDialog = new OpenFileDialog();
            openDialog.Filter = "Файл Excel|*.XLSX;*.XLS";
            openDialog.ShowDialog();

            try
            {
                ObjExcel = new Microsoft.Office.Interop.Excel.Application();
                //Книга.
                ObjWorkBook = ObjExcel.Workbooks.Open(openDialog.FileName);
                //Таблица.
                ObjWorkSheet = ObjExcel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
                Microsoft.Office.Interop.Excel.Range rg = null;

                Int32 row = 1;
                dataGridViewMain.Rows.Clear();
                List<String> arr = new List<string>();
                while (ObjWorkSheet.get_Range("a" + row, "a" + row).Value != null)
                {
                    // Читаем данные из ячейки
                    rg = ObjWorkSheet.get_Range("a" + row, "d" + row);
                    foreach (Microsoft.Office.Interop.Excel.Range item in rg)
                    {
                        try
                        {
                            arr.Add(item.Value.ToString().Trim());
                        }
                        catch { arr.Add(""); }
                    }
                    dataGridViewMain.Rows.Add(arr[0], arr[1], arr[2], arr[3]);
                    arr.Clear();
                    row++;
                }

                MessageBox.Show("Файл успешно считан!", "Считывания excel файла", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex) { MessageBox.Show("Ошибка: " + ex.Message, "Ошибка при считывании excel файла", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            finally
            {
                ObjWorkBook.Close(false, "", null);
                // Закрытие приложения Excel.
                ObjExcel.Quit();
                ObjWorkBook = null;
                ObjWorkSheet = null;
                ObjExcel = null;
                GC.Collect();
            }

            this.Text = this.Text + " - " + openDialog.SafeFileName;
            textBoxFileName.Text = openDialog.SafeFileName;
        }

        private void textBoxFileName_TextChanged(object sender, EventArgs e)
        {

        }

        private void dataGridViewMain_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}
unijkoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему Excel 2010 выполняет поиск гораздо медленнее чем Excel 2003 Sprat Microsoft Office Excel 1 25.10.2011 05:34
Скорость исполнения макроса в Excel-2010 намного ниже, чем в Excel-2003 Павел+ Microsoft Office Excel 5 29.12.2010 03:28
Каким образом можно сделать таблицу Excel в ячейке Excel? Severny Microsoft Office Excel 3 08.10.2010 09:13
Как запретить запуск программы на VBA Excel 2003 в Excel 2007 kovalevskivf Microsoft Office Excel 2 15.05.2009 16:47
Формирование из excel в ASCII, у меня он формирует по одному клиенту а в Excel нескол Askat Общие вопросы Delphi 0 18.07.2007 06:28