Hvordan søke excel-filen i C # ved hjelp av en detaljert spørring

stemmer
3

Følgende kode returnerer data fra et regneark i et rutenett perfekt

[
        string excelConnectString = Provider = Microsoft.Jet.OLEDB.4.0; +
            Data Source =  + excelFileName + ; +
            Extended Properties = Excel 8.0;;

        OleDbConnection objConn = new OleDbConnection(excelConnectString);
        OleDbCommand objCmd = new OleDbCommand(Select * From [Accounts$], objConn);

        OleDbDataAdapter objDatAdap = new OleDbDataAdapter();
        objDatAdap.SelectCommand = objCmd;
        DataSet ds = new DataSet();
        objDatAdap.Fill(ds);
        fpDataSet_Sheet1.DataSource = ds;//fill a grid with data
]

Regnearket jeg bruker har kolonner navngitte fra A og så videre (bare standard kolonnenavn) og arket heter kontoer.

Jeg har et problem med spørringen ...

  [OleDbCommand objCmd = new OleDbCommand(Select * From [Accounts$], objConn);]

Hvordan kan jeg gjøre søkestrengen som dette ...

Select <columnA>,<columnB>,SUM<columnG> from [Accounts$] group by <columnA>,<columnB>

..så at den returnerer resultatene fra dette søket

Merk: Columna er A på ark, er columnB B på blad og columnG er G på Sheet

Andre mulige alternativer:

  1. Jeg har data fra Excel spredt i en Datatable objekt, hvordan kan jeg søke i Datatable objektet
  2. Jeg leste om en Dataview objekt at det kan ta et bord og returnere tabellen manipulert i henhold til ( <dataviewObject>.RowFilter = where...), men jeg vet ikke hvordan du skal bruke spørringen jeg vil.
Publisert på 16/10/2008 klokken 05:32
kilden bruker
På andre språk...                            


3 svar

stemmer
0

I ditt eksempel ikke SUM representerer en potensiell kolonnenavn eller en SQL funciton?

Prøver du å få søket slik at du er i stand til å referere til kolonne A, B, C, D, osv ... fra Excel-ark som Columna, ColumnB, ColumnC, ColumnD, osv ... i din SQL-spørring?

Jeg antar at jeg mener: har du lyst til å skrive spørringen som dette: "Velg Columna, ColumnB, ColumnC fra [Accounts $]", heller enn dette: "Velg * fra [Accounts $]"?

I så fall kan du sette kolonneoverskriftene i den første raden i Excel-ark og behandle de som kolonnenavnene i tilkoblingsstrengen til. For å gjøre dette, må tilkoblingen streng linje ser slik ut:

excelConnectString = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source = " + excelFileName + ";" + "Extended Properties = Excel 8.0; HDR=Yes;";

Den annerledes er "HDR = Yes" del i den utvidede delen Egenskaper. Når du er i stand til å referere til kolonner i Excel-ark ved å bruke kolonnenavn, bør du være i stand til å bruke Datatable er Velg metode og Dataview er RowFilter eiendom som du nevnte.

Betyr dette hjelpe eller ta spørsmålet ditt?

Svarte 11/11/2008 kl. 16:56
kilden bruker

stemmer
2

Hvis du ikke ønsker å gjøre konsernet ved deretter Datatable klassen har en metode som kalles Compute som utfører noen SQL-funksjoner.
Følgende funksjoner er støttet: COUNT, SUM, MIN, MAX, AVG, STDEV, VAR .

string salary = empTable.Compute("SUM( Salary )", "").ToString();
string averageSalaryJan = empTable.Compute("AVG( Salary )", "Month = 1").ToString();
// Assuming you have month stored in Month column and Salary stored in Salary column

Andre alternativer du kan utforske er:

  1. Du kan bruke Microsoft KB-artikkel SLIK: Implementere et datasett GROUP BY Helper Class i Visual C # .NET

  2. Hvis du bruker .NET 3.5 kan du bruke Linq ref: LINQ Datatable Kriterier - Gruppe Aggregation

Svarte 07/01/2009 kl. 15:05
kilden bruker

stemmer
4

Vil du ha noe sånt som:

 SELECT Sum([NameOfFieldAsPerHeader]) FROM [Accounts$]

Eller

 SELECT [ForExampleEmployeeID], Sum([NameOfFieldAsPerHeader]) FROM [Accounts$]
 GROUP BY [ForExampleEmployeeID]

Eller

 SELECT [ForExampleEmployeeID], Year([SomeDate]), Sum([NameOfFieldAsPerHeader]) 
 FROM [Accounts$]
 GROUP BY [ForExampleEmployeeID], Year([SomeDate])

Eller

 SELECT [ForExampleEmployeeID], Year([SomeDate]), Sum([NameOfFieldAsPerHeader]) 
 FROM [Accounts$]
 WHERE Year([SomeDate])>2000
 GROUP BY [ForExampleEmployeeID], Year([SomeDate])
Svarte 07/01/2009 kl. 15:28
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more