[ anakin14 @ 07.10.2007. 20:35 ] @
Zdravo, pocetnik sam u VB.net i okacio sam aplikaciju i xls fajl koji ide uz nju. Aplikacija treba da otvara excel fajl i preko svoje forme da unosi podatke u fajl.
ovo je samo pocetak i okacio sam da bih postavio par pitanja:
1)kada startujem aplikaciju i ugasim je u proccessima excel ostaje aktivan.Sta da ubacim da se excel gasi.
2)kako da datagrid povezem sa fajlom to jest da u datagridu budu podaci iz fajla?
ovo je za pocetak
a evo i koda :
Code:

Public Class Form1
    Dim ap As New Microsoft.Office.Interop.Excel.Application
    Dim file As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        file = "e:\proba.xls"
        ap.Workbooks.Open(file)
        ap.Visible = True
        ap.UserControl = True
        
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ap.Range("a1").End(Microsoft.Office.Interop.Excel.XlDirection.xlDown).Offset(1, 0).Select()
        ap.ActiveCell.Value = TextBox1.Text
        ap.ActiveCell.Offset(0, 1).Value = TextBox2.Text
        ap.ActiveCell.Offset(0, 2).Value = TextBox3.Text
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ap.ActiveWorkbook.Close()
        ap.Quit()
    End Sub
End Class

[ MarkoBalkan @ 07.10.2007. 20:38 ] @
da bi ubacivao u excell, excell ne moraš otvarati.

nego učitaš xml file i ubaciš podatke u excell.
[ anakin14 @ 07.10.2007. 21:55 ] @
mozes li malo opsirnije o tom nacinu unosa u excel peko xml -fajla?
hvala
[ kuzmam @ 08.10.2007. 11:59 ] @
evo ti pomoc oko gasenja excel procesa u memoriji, svojevremno sam imao slican problem.
kod je u c#, nadam se da ti nece biti problem da ga prevedes u VB. Override-uj Dispose metodu i tu ocisti prvo memoriju od referenci na excel COM objekte pa pozovi ovu metodu.

Code:

 #region KILLING HANGING EXCEL PROCESSES
        
        [DllImport ("user32.dll")]
        static extern void EndTask(IntPtr hWnd);
        [DllImport("user32.dll")]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll")]
        static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
        [DllImport("kernel32.dll")]
        static extern void SetLastError(uint dwErrCode);

        private void EnsureProcessKilled(IntPtr mainWindowHandle, string caption)
        {
            uint iRes, iProcID;
            
            SetLastError(0);
        
            if(IntPtr.Equals(mainWindowHandle, IntPtr.Zero))
                mainWindowHandle = FindWindow(null, caption);

            if(IntPtr.Equals(mainWindowHandle, IntPtr.Zero))
                return; 
            
            iRes = GetWindowThreadProcessId(mainWindowHandle, out iProcID);
            if (iProcID == 0)
            {
                EndTask(mainWindowHandle);
                if(Marshal.GetLastWin32Error() != 0)
                    return;
                throw new ApplicationException("Failed to close Excel Process.");
            }
           
            Process proc = Process.GetProcessById((int)iProcID);
            proc.CloseMainWindow();
            proc.Refresh();
            if(proc.HasExited)
                return;

            proc.Kill();
        }

 #endregion
[ anakin14 @ 09.10.2007. 00:05 ] @
a moze li mi neko objasniti kako da povezem datagridview sa excel fajlom da se pri otvaranju aplikacije podaci iza tabele u excelu vide u datagridvew-u
Puno hvala.
[ MarkoBalkan @ 09.10.2007. 12:19 ] @
isto čitaš podatke iz excella kao i iz baze.samo što ti prvi puni red doda u nazive kolona pa moraš paziti.
[ anakin14 @ 09.10.2007. 14:18 ] @
Code:

Imports System.Data
Imports System.Data.OleDb
Public Class Form1

    Dim ap As New Microsoft.Office.Interop.Excel.Application
    Dim file As String
    Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:\proba.xls; Extended Properties=Excel 11.0;"
    Dim MyConnection As System.Data.OleDb.OleDbConnection
    Dim da As System.Data.OleDb.OleDbDataAdapter
    Dim ds As DataSet = New DataSet

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
        MyConnection = New System.Data.OleDb.OleDbConnection(ConnString)
        da = New System.Data.OleDb.OleDbDataAdapter("select * from [sheet1$]", MyConnection)
        da.Fill(ds, "[sheet1$]")
        DataGridView1.DataSource = ds.DefaultViewManager



javlja mi gresku?
gde gresim?
[ MarkoBalkan @ 09.10.2007. 15:11 ] @
Public Class Form1

Dim cs As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\a.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
Dim c As New OleDb.OleDbConnection(cs)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim a As New OleDb.OleDbDataAdapter("SELECT * FROM [List1$] ", c)
Dim d As New DataTable

a.Fill(d)

DataGridview1.DataSource = d


End Sub

End Class
[ anakin14 @ 09.10.2007. 23:41 ] @
Hvala marko, a kako da namesti m da mi datagridview menja dimenziju u zavisnosti od popunjenosti - znaci ako nije ceo popunjen da ne bude viska a ako ima vise podataka da se sam prosiri?
puno hvala!
[ MarkoBalkan @ 10.10.2007. 08:43 ] @
ja mislim da imaš negdje u svojstvima.widht i height kod cells ili kod rows, malo se igraj.
[ anakin14 @ 10.10.2007. 18:00 ] @
Hvala na odgovorima!
A kako da namestim da prilikom unosa novih podataka u sheet1 na dugme unesi se azurira i sadrzaj datagrida??? sve sam pokusao ali ne vredi!
[ MarkoBalkan @ 10.10.2007. 20:11 ] @
kako?
d.clear() -brise datatable ja mislim da tako ide, ne znam napamet.
recimo na klik ti ubacis.
i ovdje opet stavis kod za citanje i on ti sve prikaze u datagridu.
to je dobro ako je podataka malo, ali ako je iznad 50000 ovo se ne preporuca.
i jo nesto.
kod se u biti ne bi smio ponavljati.
morao bi imati jedan potprogram za citanje, kojeg pozoves u jednom i drugom slucaju i to je to, a prije toga moras obrisati sadrzaj datatable-a.
[ anakin14 @ 10.10.2007. 20:20 ] @
problem je bio u sledecem, to sam ja uprav i uradio ali nije htelo, onda sam ubacio posle svakog unosa liniju
ap.activeworkbooks.save()

i onda je radilo kako treba,jer je kod uvek citao fajl koji je u direktorijumu a kada menjas podatke u excelu dok ne zapamtis taj fajl se ne menja vec samo onaj u aktivnoj memoriji.