Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Запись в шаблон Excel-я


Автор: TwiSteR 21.3.2006, 13:13
Приветствую уважаемые,
Есть что-то типа шаблона в экселе (аттач).
так вот как открыть его записать в него данные и сохранить в другом месте ?
Будте любезны помочь.

Автор: mr.DUDA 21.3.2006, 13:29
Тема про эксель в .NET уже была, и не раз. Воспользуйтесь поиском по форуму.

Автор: TwiSteR 21.3.2006, 13:53
Цитата(mr.DUDA @ 21.3.2006, 13:29 Найти цитируемый пост)
Тема про эксель в .NET уже была, и не раз. Воспользуйтесь поиском по форуму.

Да была, ка непосредственно писать я уже вычитал, а вот как юзать так сказать шаблон. Т.е. открыть этот файл записать в него данные и "сохранить как"

Автор: TwiSteR 21.3.2006, 14:50
Вообщем разобрался
Делаю так
Код

private void button1_Click(object sender, EventArgs e)
        {
            object optional = Missing.Value;

            Excel.Application app = new Excel.Application();

            Excel.Workbook workbook2 = app.Workbooks.Open(@"c:\sf.xls", optional, optional, optional,
                optional, optional, optional, optional, optional, optional, optional,
                optional, optional, optional, optional);
            Excel.Worksheet worksheet2 = (Excel.Worksheet)workbook2.Worksheets[1];

            worksheet2.Cells[17, 2] = "test1";
            worksheet2.Cells[18, 2] = "test2";
            worksheet2.Cells[19, 2] = "test3";
            worksheet2.Cells[17, 3] = "шт.";
            worksheet2.Cells[18, 3] = "шт.";
            worksheet2.Cells[19, 3] = "шт.";

            workbook2.SaveAs(@"c:\sf1.xls", optional, optional, optional, optional,
                optional, Excel.XlSaveAsAccessMode.xlShared, optional, optional,
                optional, optional, optional);

            app.Quit();


        }


А вот не подскажите как добавить ячейки ?

Автор: mr.DUDA 21.3.2006, 15:20
Точно так же, через квадратные скобки.

Автор: TwiSteR 21.3.2006, 15:22
Цитата(mr.DUDA @ 21.3.2006, 15:20 Найти цитируемый пост)
Точно так же, через квадратные скобки.

Прости, но не понял

Автор: mr.DUDA 21.3.2006, 16:24
Цитата(TwiSteR @ 21.3.2006, 14:22 Найти цитируемый пост)
Прости, но не понял


Код

worksheet2.Cells[1000, 2000] = "test10000";

не работает ?

Автор: ivashkanet 21.3.2006, 21:23
Просто совет по Excel.

В Excel есть такая штука, как MacroRecoder.
Запускаешь его, включаешь запись макроса,
тыкаешь на кнопки, записываешь новую информацию в ячейки,
вносишь формулы, изменяешь настройки ...
Потом останавливаешь запись. И спокойно анализируешь код,
созданный MacroRecoder-ом. А он, молодец, создает код на каждое сделанное действие.
Даже изменение настроек программы и всякую другую ерунду.
Осталось преобразовать код из VB в C#, но ето несложно -- объекты
все-равно остались те же. smile
И это быстрее, чем мучать help smile .

smile Для общего развития: формулы в Excel хоть и русифицированы, но на внутреннем
языке пишутся по английски и ссылки относительные, типа R[-3]C[0]
(на три строки вверх, столбец тот же). Интересно smile

Автор: TwiSteR 22.3.2006, 09:40
mr.DUDA,
Это вставка данных в щит, а мне надо добавить ячейки к примеру в середину листа

Автор: TwiSteR 22.3.2006, 09:58
ivashkanet,
вот по поводу Макроса
Код

Sub макрос11()

    Rows("17:17").Select
    Selection.Insert Shift:=xlDown
    Selection.Insert Shift:=xlDown
    Selection.Insert Shift:=xlDown
End Sub

Вот как его переделать в C#

Автор: TwiSteR 22.3.2006, 13:23
Разобрался Делаю так
Код

range.Select();
  while (_reader.Read())
                            {
                                //ranger.Insert();
                                range.Insert(optional, optional);



Автор: ivashkanet 22.3.2006, 14:20
Цитата(TwiSteR @ 22.3.2006, 09:40 Найти цитируемый пост)
Это вставка данных в щит, а мне надо добавить ячейки к примеру в середину листа

Так в листе ж ячейки присутствуют всегда??? (6400 х JK, в общем туча???)

Автор: mr.DUDA 22.3.2006, 14:22
Цитата(ivashkanet @ 22.3.2006, 13:20 Найти цитируемый пост)
Так в листе ж ячейки присутствуют всегда??? (6400 х JK, в общем туча???)

ИМХО, он имел ввиду "вставить в лист, со сдвигом существующих значений". То есть как бы вставить в середину строку, отдельную ячейку и т.п., не затирая существующих ячеек.

Автор: ivashkanet 22.3.2006, 14:30
Цитата(mr.DUDA @ 22.3.2006, 14:22 Найти цитируемый пост)
ИМХО, он имел ввиду "вставить в лист, со сдвигом существующих значений". То есть как бы вставить в середину строку, отдельную ячейку и т.п., не затирая существующих ячеек.

ААААААА.....
Спасибо

Автор: TwiSteR 23.3.2006, 09:37
Цитата(mr.DUDA @ 22.3.2006, 14:22 Найти цитируемый пост)
ИМХО, он имел ввиду "вставить в лист, со сдвигом существующих значений". То есть как бы вставить в середину строку, отдельную ячейку и т.п., не затирая существующих ячеек.

Да именно, и нашел как это сделать. Всем спасибо !

Автор: Mag 19.5.2007, 12:19
Какое пространство имен подключить и ДЛЛ для работы с Excel, точнее вывод с датасета в Эксель?

Автор: Mag 22.5.2007, 12:55
Помощь действительно нужна!

Автор: Alexb11 14.11.2007, 10:18
Как быть, если Excel 2007?

Автор: Azzdorf 14.11.2007, 12:58
Цитата(Alexb11 @ 14.11.2007,  10:18)
Как быть, если Excel 2007?

А что там нетак???? smile 

Автор: Azzdorf 14.11.2007, 13:13
скампиль и запусти для примера - если сработает - знач всё ОК smile 

если нет - пиши решим проблемку 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();
                    }
                }
            }
        }
    }
}


да тут первый раз предложит выбрать ексель файл(шаблон) куда залить инфо (может быть с багами - учебный пример)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)