Toon posts:

[C#] Uitlezen van een Veldwaarde van een Excel 2007 bestand

Pagina: 1
Acties:
  • 60 views sinds 30-01-2008

Verwijderd

Topicstarter
Oproepmethode:


code:
1
MessageBox.Show(ExcelVeld.HaalVeldWaarde("padnaam maak hier gebruik van 2 \ ipv 1", "naam sheet", "veld"));


vb:
code:
1
MessageBox.Show(ExcelVeld.HaalVeldWaarde("c:\\users\\Thomas\\test.xlsx", "Sheet 1", "A2"));


uitlezen gebeurd hiermee:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
public string HaalVeldWaarde(string fileName, string sheetName, string addressName)
        {
            const string documentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/" + "2006/relationships/officeDocument";
            const string worksheetSchema = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
            const string sharedStringsRelationshipType = "http://schemas.openxmlformats.org/officeDocument/" + "2006/relationships/sharedStrings";
            const string sharedStringSchema = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
            string cellwaarde = null;
            using (Package xlPackage = Package.Open(fileName, FileMode.Open, FileAccess.Read))
            {
                PackagePart documentPart = null;
                Uri documentUri = null;
                foreach (System.IO.Packaging.PackageRelationship relationship in xlPackage.GetRelationshipsByType(documentRelationshipType))
                {
                    documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), relationship.TargetUri);
                    documentPart = xlPackage.GetPart(documentUri);
                    break;
                }
                if (documentPart != null)
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(documentPart.GetStream());
                    NameTable nt = new NameTable();
                    XmlNamespaceManager nsManager = new XmlNamespaceManager(nt);
                    nsManager.AddNamespace("d", worksheetSchema);
                    nsManager.AddNamespace("s", sharedStringSchema);
                    string searchString = string.Format("//d:sheet[@name='{0}']", sheetName);
                    XmlNode sheetNode = doc.SelectSingleNode(searchString, nsManager);
                    if (sheetNode != null)
                    {
                        XmlAttribute relationAttribute =
                        sheetNode.Attributes["r:id"];
                        if (relationAttribute != null)
                        {
                            string relId = relationAttribute.Value;
                            PackageRelationship sheetRelation =
                              documentPart.GetRelationship(relId);
                            Uri sheetUri = PackUriHelper.ResolvePartUri(
                              documentUri, sheetRelation.TargetUri);
                            PackagePart sheetPart = xlPackage.GetPart(sheetUri);
                            XmlDocument sheetDoc = new XmlDocument(nt);
                            sheetDoc.Load(sheetPart.GetStream());
                            XmlNode cellNode = sheetDoc.SelectSingleNode(string.Format("//d:sheetData/d:row/d:c[@r='{0}']", addressName), nsManager);
                            if (cellNode != null)
                            {
                                XmlAttribute typeAttr = cellNode.Attributes["t"];
                                string cellType = string.Empty;
                                if (typeAttr != null)
                                {
                                    cellType = typeAttr.Value;
                                }
                                XmlNode valueNode = cellNode.SelectSingleNode("d:v", nsManager);
                                if (valueNode != null)
                                {
                                    cellwaarde = valueNode.InnerText;
                                }
                                if (cellType == "b")
                                {
                                    if (cellwaarde == "1")
                                    {
                                        cellwaarde = "TRUE";
                                    }
                                    else
                                    {
                                        cellwaarde = "FALSE";
                                    }
                                }
                                else if (cellType == "s")
                                {
                                    foreach (System.IO.Packaging.PackageRelationship
                                    stringRelationship in
                                    documentPart.GetRelationshipsByType(sharedStringsRelationshipType))
                                    {
                                        Uri sharedStringsUri = PackUriHelper.ResolvePartUri(
                                        documentUri, stringRelationship.TargetUri);
                                        PackagePart stringPart = xlPackage.GetPart(sharedStringsUri);
                                        if (stringPart != null)
                                        {
                                            XmlDocument stringDoc = new XmlDocument(nt);
                                            stringDoc.Load(stringPart.GetStream());
                                            nsManager.AddNamespace("s", sharedStringSchema);
                                            int requestedString = Convert.ToInt32(cellwaarde);
                                            string strSearch = string.Format(
                                            "//s:sst/s:si[{0}]", requestedString + 1);
                                            XmlNode stringNode =
                                            stringDoc.SelectSingleNode(strSearch, nsManager);
                                            if (stringNode != null)
                                            {
                                                cellwaarde = stringNode.InnerText;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
          return cellwaarde;
        }
    }


De code om uit te lezen geeft een string terug. dit geeft je ernorm veel mogelijkheden, zoals het opbouwen van een array.

Veel Geluk ermee
Thomas.Muylaert

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 29-01 00:03

Koppensneller

winterrrrrr

Ehm... wat moeten wij daar mee?

[ Voor 99% gewijzigd door RobIII op 04-11-2007 19:52 . Reden: Quote eens niet zulke enorme lappen als je maar 1 regel 'toevoegt' :| ]


  • RobLemmens
  • Registratie: Juni 2003
  • Laatst online: 28-01 13:38
En iedereen zich maar afvragen waarom moderne software langzaam is :P

Verwijderd

Topicstarter
@ koppensneller : ik dacht dat vele mensen hier wel wat mee zouden kunnen
@rob lemmens: traag mss wel maar is wel 1 van de gemakkelijkere manieren voor een beginner.
ps sugesties zijn altijd welkom voor snellere methodes.

Verwijderd

Ik ga er van uit dat dit alleen werkt in office 2007 formaat?

Heb het voor de zekerheid maar even tussen mn snippets opgeslagen, komen nog al eens excelsheets voorbij op m'n werk, kan heus nog wel van pas komen :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Bedankt voor de "tip" ;) :Y)
Wat is verder het nut van dit topic? Kijk eens in Programming Beleid Quickstart ;)

Het is heel goed bedoeld, daar ben ik van overtuigd; maar als iedereen hier zijn snippets ging dumpen in een eigen topic dan werd het kermis ;) Ikzelf alleen heb al duizenden handige snippets; ga na wat er zou gebeuren als iedereen dat deed ;)

[ Voor 87% gewijzigd door RobIII op 04-11-2007 19:57 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.