Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Xml --> Excel, конвертация xml-файла в excel-документ 
V
    Опции темы
Azzdorf
  Дата 6.7.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



Работаю с базой данных Access, и появилась необходимость построения отчетов. С Access очень легко получить, через SQL-запрос, нужные данные в обект DataSet, его же легко засунуть в XML- файлик.

Та вот, сама проблема -теперь есть необходимость братьдолепливать поверх данных XML- файла шапку и липить это всё дело в файл Excel, или использовать шаблон Excel.

Топиков по Excel перечитал уйму, но ничего стоящего так и не обнаружил. Плиз ХЕЛП народ. Ссылки на статьи, исходники (с пояснениями), любую инфо по данныому дело, за все буду благодарен.
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
thomas
Дата 6.7.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Azzdorf
Почитай  это.

А так же это для общего развития и еще это.

Это сообщение отредактировал(а) thomas - 6.7.2007, 11:48


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Azzdorf
  Дата 6.7.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



thomas

спасибочки, часть уже прочитал нужные вещи, особенно 1 и 3 статейки smile , а вот 2 (про объектную модель на ДОТНЕТ) уже читал недавно, там много чего есть, но всё слишком не структуризировано и тяжлило что-то конкретное найти smile  smile 

буду дерзать smile 
хотя еще откырыт для предложений smile 

топик не закрываю, может еще чего-то интерестного подкинет кто-либо smile 
к тому же посля готовый исходничек с описанием выложу, как токо закончу smile 
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
Azzdorf
  Дата 7.7.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



более внимательно почитал статейки и ничего там нужного не нашол smile ,  статей про Импорт XML-карт, XML-списков и источников данных динамических диаграмм в Excel 2003  - то чучуть не то и к тому же НА VB нашкрябано, а мне нужно реализовать выборку и сохранение данных самой программой. без вмешательство в Ексель. всё должна делать сама програма с дружественны пользовательским интерфейсом

топик остается открым XML --> EXCEL smile 


так что ищем дальше smile 
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
Azzdorf
  Дата 9.7.2007, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



вообщем искал как переделывать ХМЛ в Ексель, но понял, что всё там не так просто потому как там нада ХМЛку знать на уровне - все теги и атрубуты и всё остальное,

но моеё главной целью - было екпортировать данные з Акцеса в Ексель посредством ХМЛ, и нашол я бругое решение --> сразу из дата сета в Ексель,  принцип сложылся такой: полчаем ДатаСет далее пробегаемся по нему циклом и превращаем его в стринговый прямоугольный масив после вставляем данный масивчик в ексель, только токо пока одна загвоздка которую не решил - столбцы, строки то с цифрами, я побыстрому расчетик набросал, а со столбцами додумываете ому нада сами, так как у меня  количество столбцов меняться не будет, для работы програмы нужны:
-база данных(АкцесЮ, еСКюЛь или оракл - хто что прелепит)
-шаблон документа из шапкой - тут же в програме можна выставить начальные - входящие ячейки

вообщем поличился такой пример:

Да народ там когда сохраняеш отчёт сначала выбираеш шаблон - потом куда сохранять.... smile 


Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Data.ProviderBase;
using System.Data.Sql;
using System.Drawing;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using Office;

public class MyExcel : Form
{
    [method: STAThread]
    public static int Main(string[] args)
    {
        Application.Run(new MyExcel());
        return 0;
    }

    MainMenu mainM;
    public DataGridView dgvTable = new DataGridView();
    public TextBox txtRequest = new TextBox();
    public Button btnRequest = new Button();
    public Button btnSeveZvit = new Button();

    DataSet myDS;

    string dbURL;
    string dbREQU;
    string xlsBlankURL;
    string xlsResultURL;

    public MyExcel()
    {
        CenterToScreen();
        this.Size = new Size(400, 400);

        InitializeComponent();
    }
    // Controls
    public void InitializeComponent()
    {
        FormBorderStyle = FormBorderStyle.FixedSingle;
        MainMenu_MethodConstr();
        DataGridView_MethodConstr();
        TextBox_MethodConstr();
        Button_MethodConstr();
    }
    public void MainMenu_MethodConstr()
    {
        mainM = new MainMenu();
        MenuItem miGeneral = mainM.MenuItems.Add("General");
        MenuItem miDataBase = miGeneral.MenuItems.Add("Data Base");
        miDataBase.MenuItems.Add(new MenuItem("Choose db", new EventHandler(this.ChooseDB_Click), Shortcut.CtrlO));
        MenuItem miRequest = miGeneral.MenuItems.Add("Request");
        miRequest.MenuItems.Add(new MenuItem("Do Request", new EventHandler(this.DoRequest_Click), Shortcut.CtrlD));
        miRequest.MenuItems.Add(new MenuItem("Save Request", new EventHandler(this.SaveRequest_Click), Shortcut.CtrlS));
        this.Menu = mainM;
    }
    public void DataGridView_MethodConstr()
    {
        dgvTable.Location = new Point(10, 10);
        dgvTable.Size = new Size(375, 200);
        dgvTable.ReadOnly = true;
        Controls.Add(dgvTable);
    }
    public void TextBox_MethodConstr()
    {
        txtRequest.Location = new Point(10, 220);
        txtRequest.Size = new Size(375, 25);
        txtRequest.TextAlign = HorizontalAlignment.Center;
        txtRequest.Text = "SELECT * FROM table1";
        Controls.Add(txtRequest);
    }
    public void Button_MethodConstr()
    {
        btnRequest.Location = new Point(10, 250);
        btnRequest.Size = new Size(100, 25);
        btnRequest.Text = "Do Request";
        btnRequest.FlatStyle = FlatStyle.Flat;
        btnRequest.Click += new EventHandler(btnRequest_Click);
        btnRequest.Enabled = false;
        Controls.Add(btnRequest);

        btnSeveZvit.Location = new Point(120, 250);
        btnSeveZvit.Size = new Size(100, 25);
        btnSeveZvit.Text = "Save Request";
        btnSeveZvit.FlatStyle = FlatStyle.Flat;
        btnSeveZvit.Click += new EventHandler(btnSeveZvit_Click);
        btnSeveZvit.Enabled = false;
        Controls.Add(btnSeveZvit);
    }
    // MainMenu Procesing
    private void ChooseDB_Click(object sender, EventArgs e)
    {
        OpenDB();
    }
    private void DoRequest_Click(object sender, EventArgs e)
    {
        DoRequest();
    }
    private void SaveRequest_Click(object sender, EventArgs e)
    {
        SaveRequest();
    }
    // Controls Provesung
    private void btnRequest_Click(object sender, EventArgs e)
    {
        DoRequest();
    }
    private void btnSeveZvit_Click(object sender, EventArgs e)
    {
        SaveRequest();
    }
    // DataBase
    public void OpenDB()
    {
        OpenFileDialog myOD = new OpenFileDialog();
        myOD.InitialDirectory = ".";
        myOD.Filter = "Access DB files (*.mdb)|*.mdb|All files(*.*)|*.*";
        myOD.FilterIndex = 1;
        myOD.RestoreDirectory = true;

        if (myOD.ShowDialog() == DialogResult.OK)
        {
            if (myOD.FileName.Contains(".mdb"))
            {
                dbURL = null;
                dbURL = myOD.FileName.ToString();
            }
        }
        btnRequest.Enabled = true;
    }
    // Request
    public void DoRequest()
    {
        dbREQU = txtRequest.Text;

        OleDbConnection cn = new OleDbConnection();
        cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; data source = " + dbURL + "";
        cn.Open();

        string sqlSELECT = dbREQU;
        OleDbDataAdapter dAdapt = new OleDbDataAdapter(sqlSELECT, cn);

        myDS = new DataSet("baseDS");
        dAdapt.Fill(myDS, "baseDT");

        cn.Close();

        dgvTable.DataSource = myDS.Tables["baseDT"];
        btnSeveZvit.Enabled = true;
    }
    public void SaveRequest()
    {
        int toI = myDS.Tables["baseDT"].Rows.Count;
        int toJ = myDS.Tables["baseDT"].Columns.Count;

        string[,] strArr = new string[toI, toJ];
        
        DataTable dt = myDS.Tables["baseDT"];
        
        for (int i = 0; i <= toI-1; i++)
        {
            for (int j = 0; j <= toJ-1; j++)
            {
                strArr[i, j] = dt.Rows[i][j].ToString();
            }
        }

        int cellInside = 3;
        int cellOut = cellInside + toI - 1;

        OpenFileDialog ofd = new OpenFileDialog();
        ofd.InitialDirectory = ".";
        ofd.Filter = "Excel file BLANK (*.xls)|*.xls|All files(*.*)|*.*";
        ofd.FilterIndex = 1;
        ofd.RestoreDirectory = true;

        if (ofd.ShowDialog() == DialogResult.OK)
        {
            if (ofd.FileName.Contains(".xls"))
            {
                xlsBlankURL = null;
                xlsBlankURL = ofd.FileName.ToString();

                txtRequest.Text = xlsBlankURL;

                object optional = Missing.Value;
                Excel.Application app = new Excel.Application();
                Excel.Workbook wb1 = app.Workbooks.Open(xlsBlankURL, optional, optional, optional, optional, optional, optional, optional, optional, optional, optional, optional, optional);
                Excel.Worksheet ws1 = (Excel.Worksheet)wb1.Worksheets[1];
                Excel.Range rng;

                SaveFileDialog sfd = new SaveFileDialog();
                sfd.InitialDirectory = ".";
                sfd.Filter = "Excel file RESULT (*.xls)|*.xls|All files(*.*)|*.*";
                sfd.FilterIndex = 1;
                sfd.RestoreDirectory = true;

                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    if (sfd.FileName.Contains(".xls"))
                    {
                        xlsResultURL = null;
                        xlsResultURL = sfd.FileName.ToString();

                        rng = ws1.get_Range("A"+cellInside+"", "C"+cellOut+"");
                        
                        rng.Value = strArr;

                        wb1.SaveAs(xlsResultURL, optional, optional, optional, optional, optional, Excel.XlSaveAsAccessMode.xlShared, optional, optional, optional, optional);

                        txtRequest.Text = xlsResultURL;
                        app.Quit();
                    }
                }
            }
        }
    }
}



кому нада - можете написать красивее, я лучше не умею


есть также небольшая прось ба к модераторам, ну если можна измените названице темы, или хоть какой-то тег напишете, такая штучка новичкам понадобиться

Даеш открытие ИСХОДНИКИ!!!!

дополнительно читаем здеся и ищем по форуму - собирал кусочками:
www.gotdotnet.ru/LearnDotNet/NETFramework/22054.aspx
http://forum.vingrad.ru/forum/topic-88374/...xcel/index.html

Это сообщение отредактировал(а) Azzdorf - 9.7.2007, 11:26
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
it_medved
Дата 13.1.2009, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 1.5.2007
Где: Днепропетровск

Репутация: нет
Всего: 1



using Office; - 
Error    1    The type or namespace name 'Office' could not be found (are you missing a using directive or an assembly reference?)
dllки загрузил из AddReferences, там два варианта, никакая не работает, она так и называется - Office

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0697 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.