zB mit einem OpenFileDialog
Dort kannst du mehrere Dateien auswählen.
Du musst diese dann nur noch in einer Schleife durchlaufen und den Connectionstring jeweils anpassen nzw. die Variable ersetzten.
Grüße
verwendetes Datenbanksystem: XML Excel 2007
Hallo zusammen,
ich lese zu Fuß die XML Daten in einem XLSX Dokument.
Klappt EIGTL. ganz gut bis auf folgendes Phänomen :
Ich kann nicht auf die Subelemente zugreifen weils einfach keine gibt Oo
Im Anhang seht ihr den Aufbau der jeweiligen Row bzw. Cell
Und den passenden Fehler.
Unten seht ihr meinen XMl Lesenden Code.
Jmd ne Idee ?
Grüße
var workbookname = GetWorkbookName(doc.Element("worksheet").Element("pageSetup").Attribute("r" + 0x3A + "id").Value);
var rows = GetExcelRows(from i in doc.Element("worksheet").Element("sheetData").Elements("row") select i);
private ExcelCell GetExcelCell(XElement xmlElement)
{
var column = GetColumnName(xmlElement.Attribute("r").Value);
var value = xmlElement.Attribute("t") != null
? _sharedStrings[int.Parse(xmlElement.Element("v").Value)]
: string.Empty;
var formula = xmlElement.Attribute("f") != null
? xmlElement.Attribute("f").Value
: string.Empty;
return new ExcelCell(GetColumnIndex(xmlElement.Attribute("r").Value),column,value,formula);
}
Hi Zero,
ich schlage mich mit WCF n tier sachen etc. rum aber DAS habe ich nicht drauf 😦
Danke für den Hinweis
Grüße
Danke für die Denkanstöße 😃
Grüße
Hallo zusammen,
stehe grad aufm dem Schlauch :
Für meine Excelwrapperklasse brauche ich eine Methode
die mir zB aus den Buchstaben AA = 27 ausgibt.
Also quasi das Alphabet hochzähl.
Nur wie gesagt fällt mir grad gar keine Idee ein 😦
Grüße
Hi m0rius,
das finde ich persl. nicht schlimm , wenn man weiß wie man gute Unit Tests schreibt kann man sich den erst auch herleiten.
Zumindest sollte man das meinen 😉
Grüße
Hat damit schon jdm Erfahrungen ?
Grüße
Hi,
fixed ja meine TDD 😃
Hallo zusammen,
nun soll bei uns ENDLICH mal mit TDD ab Januar angefangen werden in der Firma.
Da es im Netz zwar viele Beispiele gibt aber mein Chef einfach zu faul ist die Links zu klicken, suchen wir ein gutes Buch um es Ihm mal zur Verfügung zu stellen.
Jmd ne gute Empfehlung ?
Grüße
EDIT : Fixed
Hi,
wenn du den Programmierer nicht mit dem DB System behelligen willst,
würde ich dir vorschlagen zusätzlich EF CodeFirst anzuschauen. Nützlich dazu auch der AutoMapper.
Grüße
Hi,
ich kann per Reflection ja DLLs usw. auslesen.
Was ich aber bisher nicht gefunden habe ist in einem laufendem Prozess eine Methode
auszulösen.
Nach meinem wissen war es tatsächlich nur für Metaprogrammierung aber nicht um fremde laufende Prozesse zu steuern oder ?
Grüße
Genau das habe ich gesucht , Danke !
Hallo zusammen,
ich muss (leider) in einem Projekt eine fremde .NET Anwendung steuern.
Nun meine Frage : Wie löse ich das am besten ?
Bei Sendkeys kriege ich bauschmerzen.
Komme ich evtl. per Reflection an die Methoden etc ran ? Per Reflector kann ich diese ja auch auslesen .
Hat jmd dafür Codesnippets oder Links ?
Danke für eure Hilfe
Grüße
Ok dann nehme ich lieber die Lösung
Dank dir !
grüße
Es gibt ja die möglichkeit über ein Kommandozeilentool eine 2003er Datei zu einer 2007er xlsx. zu machen.
Diese könnte ich ja per XML einlesen
Stehen denn da die Formeln drin ?
Grüße
Hallo zusammen,
neues Problem :
Wenn ich mir eine Exceldatei einlese kriege ich nur leere Felder, Formeln werden NICHT gelesen. Bedeutet das, das ich wirklich über das hässliche COM gehen muss ?
Grüße
Kann geclosed werden,
durch beschränken der Spalten auf max 256 wurde das Problem erledigt.
Das ist auch die Interne Grenze unserer Excelfiles 😃
Grüße
Hallo,
wenn ich weniger Selektiere klappt es.
Das Problem ist die Dateien können bis zu 130 Spalten haben und bis zu xxx Zeilen.
Es ist also recht dynamisch das ganze.
Grüße
Hallo zusammen,
ich lese über OleDb eine Exceldatei ein.
Leider wird beim ExecuteReader ein Fehler geworfen :
(Siehe Anhang)
So , wie umgehe ich nun dieses Problem ?
Kann der DataReader etwas nicht mit so vielen Felder umgehen ?
Grüße
Hi,
wir nutzen WF um in unserer Software :
Die Software ist eine ACD Anlage und da ist die WF prädestiniert dafür.
Grüße
DA ^^
public class Mp3Header
{
// Public variablen
public int intBitRate;
public string strFileName;
public long lngFileSize;
public int intFrequency;
public string strMode;
public int intLength;
public string strLengthFormatted;
// Private Variablen
private ulong bithdr;
private bool boolVBitRate;
private int intVFrames;
public bool ReadMP3Information(string FileName)
{
FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
// Setze Dateinamen ohne Pfad
strFileName = @fs.Name;
char[] chrSeparators = new char[] { '\\', '/' };
string[] strSeparator = strFileName.Split(chrSeparators);
int intUpper = strSeparator.GetUpperBound(0);
strFileName = strSeparator[intUpper];
strFileName = strFileName.Replace("'", "''");
// Setze Dateilänge
lngFileSize = fs.Length;
byte[] bytHeader = new byte[4];
byte[] bytVBitRate = new byte[12];
int intPos = 0;
// Lese die ersten 4 Bits um zu prüfen ob es eine MP3 ist
do
{
fs.Position = intPos;
fs.Read(bytHeader, 0, 4);
intPos++;
LoadMP3Header(bytHeader);
}
while (!IsValidHeader() && (fs.Position != fs.Length));
//Wenn die Streamposition = der Länge ist ist es KEINE Gültige MP3
if (fs.Position != fs.Length)
{
intPos += 3;
if (getVersionIndex() == 3) // MPEG Version 1
{
if (getModeIndex() == 3) // Single Channel
{
intPos += 17;
}
else
{
intPos += 32;
}
}
else // MPEG Version 2.0 or 2.5
{
if (getModeIndex() == 3) // Single Channel
{
intPos += 9;
}
else
{
intPos += 17;
}
}
// Pürfe ob die Datei eine Variable Bitrate hat
fs.Position = intPos;
fs.Read(bytVBitRate, 0, 12);
boolVBitRate = LoadVBRHeader(bytVBitRate);
// Wenn die Datei gelesen wurde übergib die daten an die Public Variablen
intBitRate = getBitrate();
intFrequency = getFrequency();
strMode = getMode();
intLength = getLengthInSeconds();
strLengthFormatted = getFormattedLength();
fs.Close();
return true;
}
return false;
}
private void LoadMP3Header(byte[] c)
{
// c[0] = 00000011
// c[1] = 00001100
// c[2] = 00110000
// c[3] = 11000000
// Dieser Operator << bedeutet Das wir die Bits in diese Richtung schieben
// 00000011 << 24 = 00000011000000000000000000000000
// 00001100 << 16 = 000011000000000000000000
// 00110000 << 24 = 0011000000000000
// 11000000 = 11000000
// +_________________________________
// 00000011000011000011000011000000
bithdr = (ulong)(((c[0] & 255) << 24) | ((c[1] & 255) << 16) | ((c[2] & 255) << 8) | ((c[3] & 255)));
}
private bool LoadVBRHeader(byte[] inputheader)
{
//Bei einer Variablen Bitrate wird XING ausgegeben
if (inputheader[0] == 88 && inputheader[1] == 105 &&
inputheader[2] == 110 && inputheader[3] == 103)
{
int flags = (int)(((inputheader[4] & 255) << 24) | ((inputheader[5] & 255) << 16) | ((inputheader[6] & 255) << 8) | ((inputheader[7] & 255)));
if ((flags & 0x0001) == 1)
{
intVFrames = (int)(((inputheader[8] & 255) << 24) | ((inputheader[9] & 255) << 16) | ((inputheader[10] & 255) << 8) | ((inputheader[11] & 255)));
return true;
}
else
{
intVFrames = -1;
return true;
}
}
return false;
}
private bool IsValidHeader()
{
return (((getFrameSync() & 2047) == 2047) &&
((getVersionIndex() & 3) != 1) &&
((getLayerIndex() & 3) != 0) &&
((getBitrateIndex() & 15) != 0) &&
((getBitrateIndex() & 15) != 15) &&
((getFrequencyIndex() & 3) != 3) &&
((getEmphasisIndex() & 3) != 2));
}
private int getFrameSync()
{
return (int)((bithdr >> 21) & 2047);
}
private int getVersionIndex()
{
return (int)((bithdr >> 19) & 3);
}
private int getLayerIndex()
{
return (int)((bithdr >> 17) & 3);
}
private int getProtectionBit()
{
return (int)((bithdr >> 16) & 1);
}
private int getBitrateIndex()
{
return (int)((bithdr >> 12) & 15);
}
private int getFrequencyIndex()
{
return (int)((bithdr >> 10) & 3);
}
private int getPaddingBit()
{
return (int)((bithdr >> 9) & 1);
}
private int getPrivateBit()
{
return (int)((bithdr >> 8) & 1);
}
private int getModeIndex()
{
return (int)((bithdr >> 6) & 3);
}
private int getModeExtIndex()
{
return (int)((bithdr >> 4) & 3);
}
private int getCoprightBit()
{
return (int)((bithdr >> 3) & 1);
}
private int getOrginalBit()
{
return (int)((bithdr >> 2) & 1);
}
private int getEmphasisIndex()
{
return (int)(bithdr & 3);
}
private double getVersion()
{
double[] table = { 2.5, 0.0, 2.0, 1.0 };
return table[getVersionIndex()];
}
private int getLayer()
{
return (int)(4 - getLayerIndex());
}
private int getBitrate()
{
// Bei Variabler Bitrate wird ein Mittelwert gebildet
if (boolVBitRate)
{
double medFrameSize = (double)lngFileSize / (double)getNumberOfFrames();
return (int)((medFrameSize * (double)getFrequency()) / (1000.0 * ((getLayerIndex() == 3) ? 12.0 : 144.0)));
}
else
{
int[, ,] table = {
{ // MPEG 2 & 2.5
{0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160,0}, // Layer III
{0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160,0}, // Layer II
{0, 32, 48, 56, 64, 80, 96,112,128,144,160,176,192,224,256,0} // Layer I
},
{ // MPEG 1
{0, 32, 40, 48, 56, 64, 80, 96,112,128,160,192,224,256,320,0}, // Layer III
{0, 32, 48, 56, 64, 80, 96,112,128,160,192,224,256,320,384,0}, // Layer II
{0, 32, 64, 96,128,160,192,224,256,288,320,352,384,416,448,0} // Layer I
}
};
return table[getVersionIndex() & 1, getLayerIndex() - 1, getBitrateIndex()];
}
}
private int getFrequency()
{
int[,] table = {
{32000, 16000, 8000}, // MPEG 2.5
{ 0, 0, 0}, // reserved
{22050, 24000, 16000}, // MPEG 2
{44100, 48000, 32000} // MPEG 1
};
return table[getVersionIndex(), getFrequencyIndex()];
}
private string getMode()
{
switch (getModeIndex())
{
default:
return "Stereo";
case 1:
return "Joint Stereo";
case 2:
return "Dual Channel";
case 3:
return "Single Channel";
}
}
private int getLengthInSeconds()
{
// "intKilBitFileSize" geteilt durch 1000 damit die Formel stimmt "Kilobits/second"
int intKiloBitFileSize = (int)((8 * lngFileSize) / 1000);
return (int)(intKiloBitFileSize / getBitrate());
}
private string getFormattedLength()
{
// Komplette Sekunden
int s = getLengthInSeconds();
// Sekunden formatiert
int ss = s % 60;
// Komplette Minuten
int m = (s - ss) / 60;
// Formatierte Minuten
int mm = m % 60;
// Komplette Stunden
int h = (m - mm) / 60;
// mach "hh:mm:ss"
return h.ToString("D2") + ":" + mm.ToString("D2") + ":" + ss.ToString("D2");
}
private int getNumberOfFrames()
{
// Die Anzahl der MPGFrames ist abhängig obs eine Variable Bitrate oder eine feste ist
if (!boolVBitRate)
{
double medFrameSize = (double)(((getLayerIndex() == 3) ? 12 : 144) * ((1000.0 * (float)getBitrate()) / (float)getFrequency()));
return (int)(lngFileSize / medFrameSize);
}
else
return intVFrames;
}
}
Hi ,
teste mal bitte folgendes :
Füge einen Button ein
In den Eventhandler packste bitte folgendes:
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
DataGridViewRow tempRow = row;
int NextRow = dataGridView1.Rows.GetPreviousRow(row.Index, DataGridViewElementStates.None);
dataGridView1.Rows.Remove(row);
dataGridView1.Rows.Insert(NextRow-1,tempRow);
}
Dann Zeile markieren und Knopp drücken
ACHTUNG ungetestet, da gerade keine brauchbare IDE in der nähe.
Wenns klappt super wenn nicht kriegste gegen 19 Uhr ne andere Variante ^^
Oh beim zweiten mal lesen hab ich es nun begriffen : Du willst quasi wie bei Drag and Drop eine Zeile hinter eine andere einreihen können ja ?
Hi,
hast du eine ID für jeden Datensatz ?
Wenn ja , kannst du im Datagrid eine Spalte definieren wo genau diese Nummer eingetragen wird(Evtl. unsichtbar für den User)
Und schon hättest du deine Zuordnung
Aber ne andere Frage : Wofür brauchst du das ? Durch das Binden kannst du auf dem Datagrid arbeiten welches nur auf deine DataTable verweist.
Effektiv musst du nichts weiter machen als nach möglichen Änderungen zu speichern
Siehe LINK
Hi Talla,
werde mir die Links mal anschauen , Danke
Hallo zusammen,
nachdem mit zero_x mit meinem MEF Problem geholfen hat (Siehe Hier) kam bei mir der Gedanken auf nun ein Problem mit Dependency Injection zu lösen.
Dabei hat zero_x nun etwas durchklingen lassen das MEF sich dafür evtl. gar nicht eignet ?
Frank Dzaebel ein MVP schwört auf MEF und lässt da nix an MEF rankommen.
Wie seht Ihr das ? Ist MEF ein brauchbares DI Framework ? Oder würdet Ihr zu etwas anderem raten?
Hat jmd schon mit MEF aktiv gearbeitet und kann evtl. sogar Beispiele posten ?
Grüße
Hi ,
danke für die Tipps.
Ich mache dann mal nen Thread auf 😉
Hi,
also wenn ich das richtig verstanden habe :
Interface IFileReader in eine DLL packen.
Alle FileReader wie HaymarketFileReader referenzieren diese DLL.
Und im Host lade ich dann alle vom Typ IFileReader rein .
Richtig ?
Das würde aber auch bedeuteten das jede FileReader irgendwie noch den FileSearcher kriegen muss.
Wobei : Ich kann den FileSearcher als Klasse in den Host mit reinknallen und den dann als Interface an die jeweiligen Klassen übergeben oder ?
Quasi als Dependency Injection ?
Oder macht es dann eher Sinn die "gesuchten" Dateien den jeweiligen Implementierungen von IFileReader zu übergeben ?
Grüße
Hi Ok Sorry also :
Program -> (siehe Anhang)
Das ist die GUI für das Programm
Dieses Programm soll universell, je nach Dateinhalt Daten verarbeiten und Daten versenden .
So sieht zB eiune dieser Klassen aus .
class HaymarketFileReader:IFileReader
{
private readonly string _ExportFolder;
public event EventHandler<LogEventArgs> OnLogEntry;
public event EventHandler<ErrorEventArgs> OnError;
public event EventHandler<FileSendEventArgs> OnFileSend;
public void StartSearch()
{
var fileSearcher = new FileSearcherFtp();
fileSearcher.OnError += new EventHandler<ErrorEventArgs>(fileSearcher_OnError);
fileSearcher.OnSearchComplete += new EventHandler<FileSearchEventArgs>(fileSearcher_OnSearchComplete);
}
}
Und genau diese Klassen sollen als DLL ausgelagert werden Knackpunkt : Jede Klasse soll den FileSearcher nutzen.
Dieser liegt aber wiederrum in einer anderen DLL.
Und da liegt mein Problem wie binde ich das am günstigsten mit MEF ein ?
Hoffe du hast das jetzt ein wenig besser verstanden.
Grüße
Hallo zusammen,
ich ahbe ein kleines Problem :
Meine Anwendung soll nun per MEF Addons bekommen.
Besser gesagt mehrere neue Klassen.
Das Programm sucht an vorgegebenen Orten nach Dateien und verarbeitet die .
Ich habe nun für verschiedene Files mehrere Klassen
Diese Klassen rufen eine generische FileSearcherklasse auf.
So nun zum Problem : Wenn ich nun per MEF immer neue Klassen nachschiebe müssen die ja zwangsläufig jede diese Filesearcherklasse implementieren, also muss ich jeder DLL diese Klasse mitgeben.
Das würde aber gegen die Prinzipien sprechen wie DRY etc.
Wie Löse ich das ganze nun am klügsten ?
Grüße
Alle Formen von Heavy Metal MÜSSEN beim Programmieren sein.
Hi Erfinder des Rades,
genau das war der Knackpunkt bzw. das Property was ich übersehen habe 😃
Danke
Hi,
foreach (var a in ques.Answers)
{
CheckBox cb = new CheckBox();
cb.Text = a.Answer;
cb.TextAlign = ContentAlignment.MiddleLeft;
cb.CheckedChanged += new EventHandler(Checkbox_CheckedChanged);
pnlAnswer.Controls.Add(cb);
//pnlAnswer.Refresh();
}
In einer schleife, die benötigten Daten kommen aus einer Datenbank (also Labeltext)
Selbst wenn ich den Container auf 2000 px aufblähe kappt er die Sachen
mit dem WRAP habe ich auch rumgespielt
Hallo,
irgendwas scheine ich zu übersehen :
Wenn ich in ein FlowLayoutpanel programmatisch eine Checkbox hinzufüge kappt er ab xx Zeichen den Text ab.
Irgendwas übersehe ich oder ?
Grüße
Ok Werde mal schauen ,
denke auch das ein Dualcore mit 2-3 GB Ram ausreichend für Visual Studio sein sollte 😃
Grüße
Hallo zusammen,
da ich mir ein Laptop zum Programmieren holen will, es aber kein neues sein muss, habe ich mir den Laden Lapstore mal angeschaut. Das Angebot sieht echt gut aus.
Hat schon jmd Erfahrung mit diesem Laden gemacht ?
Grüße
Strategymuster und XML bzw. Textdateien klingt mir doch anch nem guten Lösungsansatz
Vielen Dank 😃
Hallo Comm,
ich finde zur Zeit keinen Anfang für folgendes Programm:
Ein Programm zum zerlegen von txt dateien.
Features :
Der User soll angeben welcher Trenner vorhanden ist ODER die Länge der ZErlegung angeben (Ähnlich Datenimport von Excel)
Zusätzlich soll jedes zerlegte Feld mit x Formeln belegt werden, welche aber vorgegeben sind (zB Wenn in Feld X der Wert "Mann" steht soll das Zielfeld eine "1" bekommen)
Wie ihr seht, die Idee ist da und die Featureliste nur eine Implementierung fehlt bzw. die zündende Initailidee.
Wie ich Dateien einlese und nach Trennern Splitte bzw. nach Feldlängen kriege ich hin.
Nur wie persistiere ich die Formeln und wende diese auf die Felder an ?`
Meine Idee wäre eine XML wo alle Formeln enthalten sind.
Also wer hat den Zündfunken für meinen Diesel 😉
Grüße
inflames Lösung ist schon vollkommen ok :
Du hast eine gewisse Anzahl an FileSysWatchern in einer Collection die x beliebig Groß ist.
Denkbar wäre das ganze auch in einem Dictionary wo du als Key den jeweiligen Pfad hast und und und
Aber Achtung ! Ab einer gewissen Zahl , je nach System , kann es vorkommen das die Dinger nicht richtig reagieren. Je nach einkommenden Daten ist es nötig den Puffer für den FSW nach oben zu setzten.
zB
var enc = System.Text.Encoding.GetEncoding(1252);
string s = "Das ist ein TEST";
byte[] b = enc.GetBytes(s);
Hi,
wieso das Rad neu erfinden wenn es in Pefektion mit Alufelgen vorhanden ist ?
Es gibt unzählige Scheduler etc.
Ich empfehle Quartz.net
Ist bei mir sehr erfolgreich im Einsatz
http://quartznet.sourceforge.net/
Grüße
Hi,
damals zu c++ Zeiten 😉 musste man noch sich das Debugrecht für den aktuellen User holen.
Habe auf die schnelle nur nen c++ Beispiel gefunden, kannst aber daraus den c# Code herleiten
Grüße
Hi,
erstmal .net und dll Injection oder besser gesagt dll injection Allgemein = BÖÖÖÖÖSE !
Zweitens : Es fehlt mir der Parameter [unsafe]
Nur so sind Zeigeroperationen möglich.
Den Rest musste dir selber herleiten , ich unterstütze keine Fremdeinspeisung 😉
Hallo,
welche Technik nutzt du denn ?
ASP.NET ?
ASP.NET MVC ?
Hier mal ein allgemeiner Ansatz aus dem MSDN LINK
Grüße
Hi Herbivore,
ok CodeDOM habe ich auch von gelesen, Danke
Ich habe Die Frage aufgemacht um vll. andere Lösungsansätze zu erfahren.
Vll geht das ganze auch anders.
Hallo zusammen,
für einen Kundenauftrag muss ich verschiedene Reports per Excel generieren.
Dieses mache ich mit dem CarlosExcelwriter.
Soweit so gut.
Ich würde aber gerne das ich die fertigen Codeteile aus einer Datenbank ziehe und just in time kompliere sodass ich quasi nur Parameter hinterlegen muss
Bsp.
Kunde klickt auf Export
-> csharp Datei wird aus DB geladen und erzeugt das Exceldokument
Welche anderen möglichkeiten stehen mir noch offen ?
Crystalreports ?
XML ?
Danke für eure Anregungen
Hi,
soetwas gibt es nicht.
Deinen bedürfnissen eher passend wäre eiN Dictionary.
Du kannst dir natürlich die Mühe machen und zB eine List<DeineKlasse> udn eine eigene Klasse definieren.
Dir steht es auch frei eine eigene Implementation zu machen, ich denke mit dem Dictionary kommst du weiter (Dictionary<string,object>)
Grüße
Ich finde es seeeeeehr ungünstig Arrays dieser Größe übers Netz zu jagen.
Denk mal lieber über Stückelung oder Streams nach bzw. Asynchrone Methoden.
Das was du vor hast ist eifnach zu viel für den Äther .
Grüße
Hi,
warum so kompliziert ?
Für einfaches handling und ohne jegliche inkompatibilitäten empfiehlt sich XML
mit LInq2XML sogar einfach zu lesen und zu schreiben.
Für kleine Projekte finde ich Access outdatet , XML bietet dir quasi felxibilität kann aber auch sowas wie Primary Keys abbilden.
Grüße