[T-SQL Excel Openrowset] Hoe schrijf ik een formule weg?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ikweethetbeter
  • Registratie: Juni 2009
  • Laatst online: 07-10 20:09
De uitdaging
Je kunt in MS SQL Server met OPENROWSET in T-SQL gegevens lezen van en schrijven naar een Excel bestand.

Dat gaat bijvoorbeeld zo:
INSERT INTO OPENROWSET
( 'Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=D:\Output\Test.xlsx;',
'SELECT KolomA,KolomB,KolomC FROM [Blad1$]')
SELECT 'Test met getal en formule' AS KolomA
, 200 AS KolomB
, '=B2-25' AS KolomC;

Ik zie in kolom C een tekst verschijnen, in plaats van een formule. En het getal in kolom B is een tekst, ook heel apart.

Hoe krijg ik Excel zover dat er een formule in kolom C komt te staan?

Als ik cel C2 ga aanpassen en op ENTER druk, dan wordt het wel ineens een formule (waarbij de tekst uit B2 als INT wordt behandeld, wat ook de bedoeling is). Een cel editen en op ENTER drukken werkt goed voor een paar cellen, maar ik ga dat niet voor een paar duizend cellen doen. Wie heeft de oplossing?

Relevante software die ik gebruik
MS SQL Server 2016 (13.0.4451 SP1)
MS SSMS 2017 (17.5)

Wat ik al gevonden of geprobeerd heb
Kolommen formatteren, schema.ini gebruiken, een eerste regel met een formule in kolom C handmatig in de file zetten, ...

Beste antwoord (via ikweethetbeter op 25-02-2018 13:56)


  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Macrootje schrijven en klaar
code:
1
2
3
4
set mycell as range
for each mycell in selection.cells
  mycell.FormulaR1C1 = mycell.value
next mycell

Alle reacties


  • RJeee
  • Registratie: Maart 2011
  • Laatst online: 13-07 21:58
Moet je de getallen misschien expliciet casten naar het gewenste datatype?

Betreft formule's, geen idee. Dit zal waarschijnlijk een (n)varchar zijn? Is er wellicht een bepaalde marker die excel verwacht om aan te duiden dat het een formule is?

  • Morelleth
  • Registratie: November 2008
  • Laatst online: 07-10 18:38
Kan je wellicht een type van wat je "paste" meegeven?
Net als in excel zelf je bij pasten de optie hebt om aan te geven de formule te pasten en niet de opmaak, of juist de tekst ipv de formule.

Of wellicht een commando erna zetten, blad berekenen? shift+f9

Ben overigens totaal niet bekend met MS SQL Server 2016 (13.0.4451 SP1) en
MS SSMS 2017 (17.5), dus weet niet wat daarin mogelijk is.

[ Voor 35% gewijzigd door Morelleth op 22-02-2018 13:27 ]

D&D enthousiast en overmatig 3D printer, dus nu ook 3D printservice en mini's: MJG-3d.nl


  • ikweethetbeter
  • Registratie: Juni 2009
  • Laatst online: 07-10 20:09
RJeee schreef op donderdag 22 februari 2018 @ 13:22:
Moet je de getallen misschien expliciet casten naar het gewenste datatype?
Dat werkt voor strings, getallen en datums, maar niet voor formules.
Betreft formule's, geen idee. Dit zal waarschijnlijk een (n)varchar zijn? Is er wellicht een bepaalde marker die excel verwacht om aan te duiden dat het een formule is?
Ik heb varchar, nvarchar, char geprobeerd, ook geen cast, dat werkt niet. F9 werkt niet. Op een cel gaan staan, deze editen, en vervolgens op enter drukken werkt wel. Maar als je 1000 rijen hebt weggeschreven, dan moet je dat 1000 keer doen. Niet te doen dus...

  • ikweethetbeter
  • Registratie: Juni 2009
  • Laatst online: 07-10 20:09
Morelleth schreef op donderdag 22 februari 2018 @ 13:25:
Of wellicht een commando erna zetten, blad berekenen? shift+f9
Helaas, dat werkt ook niet...

Acties:
  • +1 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
OleDB ondersteunt simpelweg niets anders dan datavelden.

Oftewel je kan of je formule laten berekenen op de sql-kant zodat je alleen het antwoord doorstuurt.
Of je kan het doorzetten zoals nu en dan een macro maken die elke cel gaat editten en wegschrijven zodat excel logica het oppikt.

Acties:
  • 0 Henk 'm!

  • ikweethetbeter
  • Registratie: Juni 2009
  • Laatst online: 07-10 20:09
@Gomez12
Ja, zoiets zal het zijn. Data wegschrijven in en datatab van een xlsm sheet, en bij het openen wordt de data door een stukje VBA in een presentatietab gekopieerd, waarbij je wel gewoon formules kunt hebben.

Bedankt allemaal!

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Macrootje schrijven en klaar
code:
1
2
3
4
set mycell as range
for each mycell in selection.cells
  mycell.FormulaR1C1 = mycell.value
next mycell

Acties:
  • 0 Henk 'm!

  • ikweethetbeter
  • Registratie: Juni 2009
  • Laatst online: 07-10 20:09
@Bolukan
Top, bedankt!
Pagina: 1