Servus,,
hab folgendes Problem:
Da wir eine Systemumstellung planen (CAD Software) überarbeiten wir alle Datensätze in unserem PDM System (Benennung und diverse andere spezielle Dateieigenschaften - die passiert mit Tools vom Softwarehersteller). Nun sind wir alles Menschen und die machen Fehler - so hatte ich die Idee ein kleines vb.net Programm zu schreiben dass eine Excel Datei einliest (enthält Dateipfade auf dem Server), diese Daten in ein Datenset packt, mit dsofile (customproperty) ein paar Abgleiche macht ("No-Go Wörter aus Array") und dann die "guten Datensätze" wieder aus der Datentabelle löscht. Die "schlechten" möchte ich gerne ausdrucken, damit wir diese manuell ändern können. Eins vorweg, ich habe nur ein klein wenig Ahnung von VBA aus dem Excel Bereich, daher entspricht mein Code mit Sicherheit nicht den "Gepflogenheiten"
Bis jetzt sieht meine Lösung so aus:
Global Variables (in einer class Datei):
Suchen der Datei:
Generieren des Dateipfades:
Einlesen der XLSX Datei und durchführen der Bereinigung (gekürzte Fassung):
So an diesem Punkt kann ich natürlich mit der Datentabelle "dt" ein Datagridview füttern (das kriege ich auch noch hin), aber ich würde gerne einen Report erstellen. Der ReportWizard zeigt mir aber kein Datenset an (erstelle das nur via Programmcode), somit gibts auch keinen Report. Wie kriege ich die Daten aus der "programmcodeerstellten" Datentabelle in einen Report?
Wie bereits angeführt, bin weder Programmierer, noch tief in der Materie drin.
Irgendein Tip für mein Problem, wäre echt dankbar!
Gruss aus der Schweiz
Moritz
hab folgendes Problem:
Da wir eine Systemumstellung planen (CAD Software) überarbeiten wir alle Datensätze in unserem PDM System (Benennung und diverse andere spezielle Dateieigenschaften - die passiert mit Tools vom Softwarehersteller). Nun sind wir alles Menschen und die machen Fehler - so hatte ich die Idee ein kleines vb.net Programm zu schreiben dass eine Excel Datei einliest (enthält Dateipfade auf dem Server), diese Daten in ein Datenset packt, mit dsofile (customproperty) ein paar Abgleiche macht ("No-Go Wörter aus Array") und dann die "guten Datensätze" wieder aus der Datentabelle löscht. Die "schlechten" möchte ich gerne ausdrucken, damit wir diese manuell ändern können. Eins vorweg, ich habe nur ein klein wenig Ahnung von VBA aus dem Excel Bereich, daher entspricht mein Code mit Sicherheit nicht den "Gepflogenheiten"
Bis jetzt sieht meine Lösung so aus:
Global Variables (in einer class Datei):
Quellcode
- Public Class GlobalVariables
- Public Shared Path As String
- Public Shared UserAge As Integer
- Public Property Filter As String
- Public Shared arrTitel As New ArrayList()
- Public Shared arrMaterial As New ArrayList()
- Public Shared arrCoating As New ArrayList()
- Public Shared ds As DataSet
- Public Shared dt As DataTable
- End Class
Suchen der Datei:
Quellcode
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- OpenFileDialog1.Title = "Bitte Excel Datei auswählen" 'Titel für Dateiauswahl
- OpenFileDialog1.InitialDirectory = "F:\SolidEdge\Datenbankbereinigung (rd)\FinalCheck\" 'Auswahl der XLSX Datei
- OpenFileDialog1.Filter = "Excel |*.xlsx" 'Filter für Excel Files only
- OpenFileDialog1.FilterIndex = 1 'Filter aktiv
- OpenFileDialog1.ShowDialog()
- End Sub
Generieren des Dateipfades:
Quellcode
- Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
- GlobalVariables.Path = OpenFileDialog1.FileName.ToString()
- If Not String.IsNullOrEmpty(GlobalVariables.Path) Then
- PictureBox1.Visible = True
- Button2.Enabled = True
- End If
- End Sub
Einlesen der XLSX Datei und durchführen der Bereinigung (gekürzte Fassung):
Quellcode
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- Dim dsoDoc As New DSOFile.OleDocumentProperties
- GlobalVariables.dt = New DataTable()
- Using cn As New System.Data.OleDb.OleDbConnection
- Using cmd As OleDbCommand = New OleDbCommand With
- {
- .Connection = cn,
- .CommandText = "SELECT * FROM [Combined$]"
- }
- Dim FileName As String = IO.Path.Combine(
- Application.StartupPath, GlobalVariables.Path)
- Dim Builder As New OleDbConnectionStringBuilder With
- {
- .DataSource = FileName,
- .Provider = "Microsoft.ACE.OLEDB.12.0"
- }
- Builder.Add("Extended Properties", "Excel 12.0; HDR=No;")
- cn.ConnectionString = Builder.ConnectionString
- cn.Open()
- GlobalVariables.dt.Load(cmd.ExecuteReader)
- End Using
- End Using
- For i As Integer = GlobalVariables.dt.Rows.Count - 1 To 0 Step -1
- Dim dr As DataRow = GlobalVariables.dt.Rows(i)
- Dim temp As String
- Dim vorhanden As String = 0
- dsoDoc.Open(dr(0).ToString, True, DSOFile.dsoFileOpenOptions.dsoOptionDefault)
- For Each prop In dsoDoc.CustomProperties
- If CType(prop, DSOFile.CustomProperty).Name = "Titel englisch" Then
- temp = CType(prop, DSOFile.CustomProperty).Value.ToString
- For Each item As String In GlobalVariables.arrTitel
- If temp.Contains(item) Then
- vorhanden = 1
- End If
- Next
- End If
- Next
- If vorhanden = 1 Then
- dr.Delete()
- End If
- dsoDoc.Close()
- Next
- GlobalVariables.dt.Columns(0).ColumnName = "Dateipfad"
- GlobalVariables.dt.Columns(1).ColumnName = "Teilenummer"
- GlobalVariables.dt.Columns(2).ColumnName = "Benennung"
- PictureBox3.Visible = True
- Button3.Enabled = True
- End Sub
So an diesem Punkt kann ich natürlich mit der Datentabelle "dt" ein Datagridview füttern (das kriege ich auch noch hin), aber ich würde gerne einen Report erstellen. Der ReportWizard zeigt mir aber kein Datenset an (erstelle das nur via Programmcode), somit gibts auch keinen Report. Wie kriege ich die Daten aus der "programmcodeerstellten" Datentabelle in einen Report?
Wie bereits angeführt, bin weder Programmierer, noch tief in der Materie drin.
Irgendein Tip für mein Problem, wäre echt dankbar!
Gruss aus der Schweiz
Moritz