Quiero conectarme a una base de datos mongodb utilizando macros de Excel, ¿alguien sabe cómo realizar esta tarea?Cómo conectar Mongodb desde Excel
Respuesta
Una manera sencilla es
- crear una DLL de C# para interactuar con MongoDB a través de controladores disponibles de C#.
- Que sea visible Com (en AssemblyInfo.cs), edifican y registrarlo
- Ir a la macro Excel -> Editor de Visual Basic
- Haga clic en herramientas-> referencia y seleccione su montaje registrada
- Y úsela en su VBA, así.
.
Private Sub CallMongo()
Dim mongoObj As New MyMongoAssembly
mongoObj.AddItem("adas");
End Sub
eso es todo ..
¿Estás bromeando? –
¿hay algo divertido? – RameshVel
Consideraría seriamente eliminar la palabra "simple" de la primera oración de su respuesta. Esta es ciertamente una solución viable para alguien con todas las habilidades requeridas, y el tiempo, pero ciertamente no es simple. –
creo que la mejor respuesta sería escribir o encontrar un controlador ODBC para MongoDB. Hazme saber si encuentras uno.
Al margen de eso, puede escribir una interfaz web para mongodb que represente la consulta adecuada en una tabla HTML y utilice la función de Excel para analizar tablas HTML desde páginas web. No es tan limpio como ODBC, pero es mejor que exportar CSV una y otra vez.
siempre se puede ver esta solución, no han probado a mí mismo y sí requiere un par de saltos: http://sqlmag.com/blog/integrating-mongodb-and-open-source-data-stores-power-pivot
Tenga en cuenta que [solo respuestas de enlace] (http://meta.stackoverflow.com/tags/link-only -answers/info) son desaconsejados, SO las respuestas deben ser el punto final de una búsqueda de una solución (frente a otra escala más de referencias, que tienden a quedar obsoletas en el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia. – kleopatra
Mi propia solución era dejar que Python unirlos usando pymongo y win32com. Entonces es bastante sencillo ejecutar lo que quieras. En mi caso, tengo el ciclo de Python, simplemente "escucho" continuamente ciertas células de Excel, llamo a Mongo lo que necesita y luego lo vuelvo a poner en Excel. Es flexible y muchas cosas se pueden hacer de esta manera. Aquí está la base de código completo, pero tendrá que cambiar las llamadas a Mongodb para que coincida con su propia base de datos. Aquí también verá ciertas formas en que puede cambiar los colores y las cosas de las celdas de Excel desde dentro de Python. Oh, debería mencionar que está salpicado de secuencias de escape ansi, por lo que es posible que desee ejecutar Python desde ansicon o ConEmu.
import win32com.client as win32
import time # will need this for time parsing
from optparse import OptionParser
import pdb # debugger, when necessary
import string # for string parsing and the alphabet
from pymongo import MongoClient
import inspect
from datetime import datetime, timedelta, tzinfo
from dateutil import tz
from bson.son import SON
import msvcrt # for getch
import os
import sys # for stdout.write
from collections import OrderedDict
def parseCmdLine():
parser = OptionParser(description="Retrieve realtime data.")
parser.add_option("--f",
dest="file",
help="filename",
default="bbcapture.xls")
parser.add_option("--mongohost",
dest="mongohost",
default="192.168.1.30")
parser.add_option("--mongoport",
dest="mongoport",
type="int",
default=27017)
(options, args) = parser.parse_args()
return(options)
options = parseCmdLine() # parse the commandline
client = MongoClient(options.mongohost, options.mongoport) # link to mongo
db = client.bb # the database
bbsecs = db.bbsecs # now all the collections
bbdaily = db.bbdaily
bbticks = db.bbticks
linkstatusperiod = False # for the moving period in the top left excel cell showing we're linked
def ansi(colour = "white", bright = False, back = "black"):
# ansi colour sequences
brit = {True: "\033[1m",
False: "\033[0m"}
colo = {"black": "\033[30m",
"red": "\033[31m",
"green": "\033[32m",
"yellow": "\033[33m",
"blue": "\033[34m",
"magenta": "\033[35m",
"cyan": "\033[36m",
"white": "\033[37m"}
bakk = {"black": "\033[40m",
"red": "\033[41m",
"green": "\033[42m",
"yellow": "\033[43m",
"blue": "\033[44m",
"magenta": "\033[45m",
"cyan": "\033[46m",
"white": "\033[47m"}
sys.stdout.write(brit[bright])
sys.stdout.write(colo[colour])
sys.stdout.write(bakk[back])
def mdaily(ticker = "USDEUR Curncy", field = "LAST_PRICE", sortdirection = 1, numget = 1000000):
ansi("cyan", False)
print "\nGetting", ticker, "field", field, "from Mongo...",
lister = OrderedDict()
#for post in bbdaily.find({"ticker": ticker, "fieldname": field}).limit(numget).sort("time", sortdirection):
for post in bbdaily.find({"$query": {"ticker": ticker, "fieldname": field}, "$orderby": {"time": -1}}).limit(numget):
lister[str(post["time"])] = post["fieldvalue"]
ansi("cyan", True)
print "got", len(lister), "values",
ansi()
return lister
def mtick(tickers, sortdirection = 1, numget = 1000000):
if len(tickers) == 0:
return []
else:
ansi("green", False)
print "\n Getting minutes for for", tickers,
tickerdic = OrderedDict()
for eachticker in tickers:
eachdic = dict()
print numget
for post in bbticks.find({"ticker": eachticker}).limit(numget):
eachdic[post["time"]] = [post["open"], post["high"], post["low"], post["close"]]
ansi("green")
tickerdic[eachticker] = eachdic
print "got", len(eachdic), "for ticker", eachticker,
ansi("green", True)
print "got", len(tickerdic), "tickers",
dates = [set(tickerdic[x].keys()) for x in tickerdic] # get all the dates
dates = set.intersection(*dates) # get the unique ones
dates = [x for x in dates] # convert to list
if sortdirection == -1:
dates = sorted(dates, reverse = True)
else:
dates = sorted(dates, reverse = False)
retlist = [[[x, tickerdic[y][x][0], tickerdic[y][x][1], tickerdic[y][x][2], tickerdic[y][x][3]] for x in dates] for y in tickerdic.keys()]
ansi()
return retlist
def getsecs():
seclist = []
for post in bbsecs.find():
seclist.append(post["ticker"])
return(seclist)
def offsetString(startrow, startcol, endrow, endcol):
startrowstr = str(startrow)
endrowstr = str(endrow)
if(startcol > 26):
startcolstr = string.uppercase[startcol/26 - 1] + string.uppercase[startcol % 26 - 1]
else:
startcolstr = string.uppercase[startcol - 1]
if(endcol > 26):
endcolstr = string.uppercase[endcol/26 - 1] + string.uppercase[endcol % 26 - 1]
else:
endcolstr = string.uppercase[endcol - 1]
return(startcolstr + startrowstr + ":" + endcolstr + endrowstr)
def main():
excel = win32.gencache.EnsureDispatch("Excel.Application")
excel.Visible = 1
try: # try to link to the file
ansi("red", False)
print "Linking to", options.file
wb = excel.Workbooks(options.file)
ws = wb.Worksheets("MongoData")
ansi()
except: # not open then try to load it
try:
ansi("red", False)
print "Not open.... trying to open in current directory", os.getcwd()
ansi()
wb = excel.Workbooks.Open(os.getcwd() + "\\" + options.file)
ws = wb.Worksheets("MongoData")
ansi()
except: # can't load then ask to create it
ansi("red", True)
print options.file, "not found here. Create? (y/n) ",
ansi("yellow", True)
response = msvcrt.getch()
print response
ansi()
if response.upper() == "Y":
wb = excel.Workbooks.Add()
ws = excel.Worksheets.Add()
ws.Name = "MongoData"
wb.SaveAs(os.getcwd() + "\\" + options.file)
else: # don't wanna create it then exit
print "bye."
return
# see if ticks sheet works otherwise add it
try:
wst = wb.Worksheets("MongoTicks")
except:
wst = excel.Worksheets.Add()
wst.Name = "MongoTicks"
wst.Cells(3, 2).Value = 1
# see if securities list sheet works otherwise add it
try:
wall = wb.Worksheets("AllSecurities")
wall.Cells(1, 1).Value = "List of all securities"
wall.Range("A1:A1").Interior.ColorIndex = 8
wall.Range("A:A").ColumnWidth = 22
except:
wall = excel.Worksheets.Add()
wall.Name = "AllSecurities"
wall.Cells(1, 1).Value = "List of all securities"
wall.Range("A1:A1").Interior.ColorIndex = 8
wall.Range("A:A").ColumnWidth = 22
ansi("green", True)
print "talking to", options.file,
ansi("green", False)
print "... press any key when this console has the focus, to end communication"
ansi()
def linkstatusupdate():
global linkstatusperiod
if linkstatusperiod:
ws.Cells(1, 1).Value = "Talking to Python|"
wst.Cells(1, 1).Value = "Talking to Python!"
linkstatusperiod = False
else:
ws.Cells(1, 1).Value = "Talking to Python|"
wst.Cells(1, 1).Value = "Talking to Python!"
linkstatusperiod = True
ws.Cells(1, 2).Value = datetime.now()
# daily worksheet header formatting
ws.Cells(1, 1).Value = "Excel linked to Python"
ws.Cells(1, 3).Value = "Sort direction:"
ws.Cells(1, 4).Value = 1
ws.Cells(1, 5).Value = "Fetch max:"
ws.Cells(2, 1).Value = "Enter tickers:"
ws.Cells(3, 1).Value = "Start data:"
ws.Cells(4, 1).Value = "End data:"
ws.Range("A:A").ColumnWidth = 22
ws.Range("B:B").ColumnWidth = 20
ws.Range("A2:GS2").Interior.ColorIndex = 19 # beige 200 columns
ws.Range("A3:GS4").Interior.ColorIndex = 15 # grey
ws.Range("A2").Interior.ColorIndex = 3 # red
ws.Range("A3:A4").Interior.ColorIndex = 16 # dark grey
# minute worksheet header formatting
wst.Cells(1, 1).Value = "Excel linked to Python"
wst.Cells(2, 1).Value = "Enter tickers:"
#wst.Cells(3, 1).Value = "Enter periodicity:"
wst.Cells(1, 3).Value = "Sort direction:"
wst.Cells(1, 4).Value = 1
wst.Cells(1, 5).Value = "Fetch max:"
wst.Range("A:A").ColumnWidth = 22
wst.Range("B:B").ColumnWidth = 20
wst.Range("A2:GS3").Interior.ColorIndex = 19 # beige 200 columns
wst.Range("A4:GS5").Interior.ColorIndex = 15 # grey
wst.Range("A2:A3").Interior.ColorIndex = 4 # red
wst.Range("6:100000").Clear()
linkstatusperiod = False
oldsecd = []
oldseci = []
oldnumget = oldsortdir = toldnumget = toldsortdir = 0
while not msvcrt.kbhit():
try:
print "...", wb.Name,
securities = ws.Range("B2:GS2").Value[0]
sortdir = ws.Cells(1, 4).Value
if sortdir == None:
sortdir = 1
sortdir = int(sortdir)
numget = ws.Cells(1, 6).Value
if numget == None:
numget = 1000000
numget = int(numget)
securities = [x for x in securities if x is not None]
if not ((oldsecd == securities) and (oldnumget == numget) and (oldsortdir == sortdir)): # clear content of cells
ws.Range("5:1000000").Clear()
ws.Range("B3:GS4").Clear()
ws.Range("B3:GS4").Interior.ColorIndex = 15 # grey
oldsecd = securities
oldnumget = numget
oldsortdir = sortdir
currentcol = 0
for sec in securities:
linkstatusupdate()
secdata = mdaily(sec, "LAST_PRICE", sortdir, numget)
currentrow = 0
vallist = []
datelist = []
if sortdir == -1:
sortedkeys = sorted(secdata, reverse = True)
else:
sortedkeys = sorted(secdata, reverse = False)
for eachkey in sortedkeys:
datelist.append(eachkey)
vallist.append(secdata[eachkey])
#now stick them in Excel
ws.Range(offsetString(5 + currentrow, 2 + currentcol, 5 + currentrow + len(vallist) - 1, 2 + currentcol)).Value = \
tuple([(x,) for x in vallist])
if currentcol == 0:
ws.Range(offsetString(5 + currentrow, 1, 5 + currentrow + len(vallist) - 1, 1)).Value = \
tuple([(x,) for x in datelist])
if len(sortedkeys) > 0:
ws.Cells(3, 2 + currentcol).Value = sortedkeys[len(sortedkeys) - 1].split()[0] # start data date
ws.Cells(4, 2 + currentcol).Value = sortedkeys[0].split()[0] # end data date
currentcol += 1
# now do the tick data
securitiest = wst.Range("B2:GS2").Value[0]
securitiest = [x for x in securitiest if x is not None]
tsortdir = wst.Cells(1, 4).Value
if tsortdir == None:
tsortdir = 1
tsortdir = int(tsortdir)
tnumget = wst.Cells(1, 6).Value
if tnumget == None:
tnumget = 1000000
tnumget = int(tnumget)
if not ((oldseci == securitiest) and (toldnumget == tnumget) and (toldsortdir == tsortdir)): # clear the contents of the cells
wst.Range("6:1000000").Clear()
wst.Range("B4:GS5").Clear()
wst.Range("B4:GS5").Interior.ColorIndex = 15 # grey
oldseci = securitiest
toldnumget = tnumget
toldsortdir = tsortdir
secdata = mtick(securitiest, tsortdir, tnumget)
currentsec = 0
for x in secdata:
sender = [tuple(y[1:5]) for y in x]
wst.Range(offsetString(6, 2 + currentsec * 4, 6 + len(x) - 1, 5 + currentsec * 4)).Value = sender
if currentsec == 0: # then put the dates in
dates = [tuple([y[0], ]) for y in x]
wst.Range(offsetString(6, 1, 6 + len(x) - 1, 1)).Value = dates
wst.Range(offsetString(5, 2 + currentsec * 4, 5, 5 + currentsec * 4)).Value = ["open", "high", "low", "close"]
currentsec += 1
for x in range(0, len(securitiest)):
wst.Cells(4, 2 + x * 4).Value = securitiest[x]
linkstatusupdate()
allsecs = tuple([(yy,) for yy in getsecs()])
wall.Range(offsetString(2, 1, len(allsecs) + 1, 1)).Value = allsecs
except:
print "\nExcel busy",
time.sleep(1)
endchar = msvcrt.getch() # capture the last character so it doesn't go to console
print "\nbye."
if __name__ == "__main__":
main()
Aquí hay un controlador ODBC sólida que también ayuda a mantener la fidelidad de sus datos MongoDB exponiendo el modelo de datos MongoDB anidado como un conjunto de tablas relacionales a Excel y otras aplicaciones ODBC:
http://www.progress.com/products/datadirect-connect/odbc-drivers/data-sources/mongodb
The Shell Approach
Casi todo lo que se relaciona con la línea de comandos se puede acceder con Shell.
Aquí hay un ejemplo escueto que se conecta a una instancia de MongoDB en ejecución e imprime una consulta en la ventana Inmediato. Deberá agregar una referencia al Windows Script Host Object Model
.
Private Sub Test()
Dim wsh As New WshShell
Dim proc As WshExec
Dim line As String
Set proc = wsh.Exec("mongo")
With proc
.StdIn.WriteLine "use test"
.StdIn.WriteLine "db.restaurants.find({""address.zipcode"":""10075""})"
.StdIn.WriteLine "quit()"
Do While .Status = WshRunning
line = .StdOut.ReadLine
If line = "Type ""it"" for more" Then
.StdIn.WriteLine "it"
ElseIf line Like "{*" Then
Debug.Print line
End If
DoEvents
Loop
End With
End Sub
Simplemente imprimir las cadenas de JSON sin procesar no es muy emocionante o útil, sin embargo.Puede escribir su propio analizador JSON pero, para este ejemplo, utilizaremos VBA-JSON por Tim Hall (puede find it on GitHub).
En el momento de la redacción, hay un problema con VBA-JSON que debe abordarse al usarlo para analizar cadenas devueltas desde MongoDB. Cualquier valor que contenga paréntesis, p. "_id": ObjectId("...")
, arrojará un error. Una solución rápida y sucia para esto es usar RegEx para limpiar la cadena para el analizador. Tendrá que hacer referencia a la biblioteca Microsoft VBScript Regular Expressions 5.5
para que funcione la siguiente función.
Private Function CleanString(str As String) As String
Dim temp As String
Dim rx As New RegExp
With rx
.IgnoreCase = True
.Global = True
.Pattern = "[a-z]*\(" ' Left
temp = .Replace(str, "")
.Pattern = "\)" ' Right
temp = .Replace(temp, "")
End With
CleanString = temp
End Function
Entonces podemos analizar el JSON regresaron de MongoDB y añadir cada objeto a un Collection
. El acceso a los valores se vuelve bastante simple.
Private Sub Mongo()
Dim wsh As New WshShell
Dim proc As WshExec
Dim line As String
Dim response As New Collection
Dim json As Object
Set proc = wsh.Exec("mongo")
With proc
.StdIn.WriteLine "use test"
.StdIn.WriteLine "db.restaurants.find({""address.zipcode"":""10075""})"
.StdIn.WriteLine "quit()"
Do While .Status = WshRunning
line = .StdOut.ReadLine
If line = "Type ""it"" for more" Then
.StdIn.WriteLine "it"
ElseIf line Like "{*" Then
response.Add ParseJson(CleanString(line))
End If
DoEvents
Loop
End With
For Each json In response
Debug.Print json("name"), json("address")("street")
Next
End Sub
... que producirá la siguiente salida de la MongoDB Example Dataset.
Nectar Coffee Shop Madison Avenue
Viand Cafe Madison Avenue
Don Filippo Restaurant Lexington Avenue
Lusardi'S Restaurant Second Avenue
Due Third Avenue
Lenox Hill Grill/Pizza Lexington Avenue
Quatorze Bistro East 79 Street
Luke'S Bar & Grill Third Avenue
Starbucks Coffee Lexington Avenue
New York Jr. League East 80 Street
Doc Watsons 2 Avenue
Serafina Fabulous Pizza Madison Avenue
Canyon Road Grill 1 Avenue
Sushi Of Gari East 78 Street
Gotchas
ReadLine
yWriteLine
son funciones de bloqueo.- La ventana abierta por
Exec
no se puede ocultar.
Una solución para tanto de lo anterior sería utilizar un enfoque de dos capas, donde VBA llama a un script oculto utilizando wsh.Run
, que luego ejecuta el Exec
(así como cualquier otro código que interactúa con el proc) . La desventaja de este enfoque es que StdIn (y hasta cierto punto StdOut) debe escribirse en un archivo.
Esta es la mejor solución. No requiere licencias, no tiene capa adicional (python/C#), no tiene administración de archivos, y es realmente muy elegante. Existen algunos métodos raros para ocultar la ventana del ejecutor, que se describen aquí: http://stackoverflow.com/questions/32297699/hide-command-prompt-window-when-using-exec, pero no los he escrito. – lukehawk
Hay controladores ODBC disponibles desde el progreso (se mencionan a continuación), desde easysoft y cdata.
He intentado con el progreso y hace bien el trabajo. Todos estos controladores son software con licencia y la versión de prueba también está disponible.
El más fácil de usar es el cdata Excel Add-In que puede consultar, actualizar y también permite utilizar la fórmula basada en Excel & VBA. También tiene licencia.
Una forma más es consultar usando pymongo en python en lugar de mongo client, volcando los resultados a un archivo csv e importando el csv a través de VBA. Consultar mongoDB desde python es bastante fácil.
Este es el ejemplo para consultar desde MongoDB Ejemplo de conjunto de datos.
El archivo de Python para la consulta, "queryMongoDB.py"
SERVER = "192.168.43.22" # Replace wit with Server IP or Hostname running mongod
PORT = "27017"
def queryMongoDB():
try:
from pymongo import MongoClient
client = MongoClient("mongodb://" + SERVER + ":" + PORT)
db = client.test
queryResp = db.restaurants.find({'address.zipcode': "11215", 'cuisine': 'Indian'}, {'name': 1, 'address.building': 1, 'address.street': 1, 'borough': 1, '_id': 0})
if queryResp.count() > 0 :
for row in queryResp:
printStr = ""
if 'name' in row:
printStr = row['name'] + ","
else:
printStr = ","
if 'building' in str(row):
printStr = printStr + row['address']['building'] + ","
else:
printStr = printStr + ","
if 'street' in str(row):
printStr = printStr + row['address']['street'] + ","
else:
printStr = printStr + ","
if 'borough' in row:
printStr = printStr + row['borough']
print(printStr)
else:
return -2
return 0
except ImportError:
return -1
queryMongoDB()
La ejecución de este script producirá la salida estándar como
Kinara Indian Restaurant,473,5 Avenue,Brooklyn
Baluchi'S,310,5 Avenue,Brooklyn
Kanan Indian Restaurant,452,3Rd Ave,Brooklyn
New Aarpan,396,5Th Ave,Brooklyn
Indian Spice,351,7Th Ave,Brooklyn
El Excel VBA macro mediante WshShell, macro_queryMongoDB()
Sub macro_queryMongoDB()
Dim pythonExecutable As String
Dim pythonQueryScript As String
pythonExecuatble = "python.exe" ' Path to python interpreter
pythonQueryScript = "queryMongoDB.py" 'Full path to the above Python script
If Dir(pythonExecuatble) <> "" And Dir(pythonQueryScript) <> "" Then
Dim objShell As Object
Dim objWshScriptExec As Object
Dim objStdOut As Object
Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec(pythonExecuatble & " " & pythonQueryScript) ' Execute the Python script
Set objStdOut = objWshScriptExec.StdOut
Set mybook = Excel.ActiveWorkbook
Set mybookSheet = mybook.ActiveSheet
Dim rline As String
Dim strline As String
Dim lineCount As Long
' Parse the results
lineCount = 1
While Not objStdOut.AtEndOfStream
rline = objStdOut.ReadLine
If rline <> "" Then
strline = rline & vbCrLf
mybookSheet.Range(mybookSheet.Cells(lineCount, "A"), mybookSheet.Cells(lineCount, "D")).Value = Split(strline, ",")
lineCount = lineCount + 1
End If
Wend
MsgBox "Query Successful"
Else
MsgBox "Python executable or Python query DB script doesn't exist."
End If
End Sub
de ejecutar esta macro se rellenará la coma separados datos en filas como
Puedo hacerme eco de las otras respuestas que se refieren al uso de un controlador ODBC para conectarse a los datos de MongoDB en Excel. El problema, por supuesto, es que no hay forma de que uses macros.
Como mencionó Irfan, CData Excel Add-In le permitirá hacer precisamente eso. (Divulgación completa, yo trabajo para CData Software). Usted puede leer acerca de la conexión a MongoDB el uso de macros en nuestra Help documentation, pero he incluido un fragmento de código relevante aquí para demostrar la funcionalidad básica de la lectura de sus datos MongoDB en Excel:
Sub DoSelect()
On Error GoTo Error
p_id = InputBox("_id:", "Get _id")
If p_id = False Then
Exit Sub
End If
Dim module As New ExcelComModule
module.SetProviderName ("MongoDB")
Cursor = Application.Cursor
Application.Cursor = xlWait
Dim nameArray
nameArray = Array("_idparam")
Dim valueArray
valueArray = Array(p_id)
Query = "SELECT City, CompanyName FROM Customers WHERE _id = @_idparam"
module.SetConnectionString ("Server=127.0.0.1;Port=27017;Database=test;User=test;Password=test;")
If module.Select(Query, nameArray, valueArray) Then
Dim ColumnCount As Integer
ColumnCount = module.GetColumnCount
For Count = 0 To ColumnCount - 1
Application.ActiveSheet.Cells(1, Count + 1).Value = module.GetColumnName(Count)
Next
Dim RowIndex As Integer
RowIndex = 2
While (Not module.EOF)
For columnIndex = 0 To ColumnCount - 1
If Conversion.CInt(module.GetColumnType(columnIndex)) = Conversion.CInt(vbDate) And Not IsNull(module.GetValue(columnIndex)) Then
Application.ActiveSheet.Cells(RowIndex, columnIndex + 1).Value = Conversion.CDate(module.GetValue(columnIndex))
Else
Application.ActiveSheet.Cells(RowIndex, columnIndex + 1).Value = module.GetValue(columnIndex)
End If
Next
module.MoveNext
RowIndex = RowIndex + 1
Wend
MsgBox "The SELECT query successful."
Else
MsgBox "The SELECT query failed."
End If
Application.Cursor = Cursor
Exit Sub
Error:
MsgBox "ERROR: " & Err.Description
Application.Cursor = Cursor
End Sub
Nuestra versión 2016 se encuentra actualmente en Beta , para que pueda comenzar a trabajar con sus datos de MongoDB en Excel de forma gratuita hoy.
Dicen que hay un mongodb COM controlador tercera fiesta en torno a: http://na-s.jp/MongoCOM/index.en.html Después de instalar y hacer referencia a ella, puede ejecutar consultas como
Dim oConn
Dim oCursor,o
Set oConn = oMng.NewScopedDBConnection(cHostAndPort)
Set oCursor = oConn.Query("ec.member", oMng.FJ("{ ""age"": 37 }")
Do While oCursor.More
Set o = oCursor.Next
MsgBox "mname: " & o("mname")
MsgBox "dept: " & o("dept")
MsgBox "age: " & o("age")
Loop
Esto es para aquellos que piensa que de-la normalización de las estructuras de MongoDB y traducirlos a SQL-queryable sobre la marcha cada vez que necesita un poco de datos es una exageración ;-)
- 1. ¿Se puede conectar al servidor SQL desde Excel?
- 2. ¿Cómo conectar Jms desde PHP?
- 3. ¿Conectar a mongodb a través del navegador?
- 4. ¿Cómo puedo conectar a eventos de Excel en Javascript
- 5. MongoDB: ¿Cómo puedo almacenar archivos (Word, Excel, etc.)?
- 6. Cómo pasar ObjectId desde MongoDB en MVC.net
- 7. MongoDB: cómo obtener db.stats() desde la API
- 8. ¿Cómo ejecutar macros de Excel desde VS? ?
- 9. Formateo de ISODate desde Mongodb
- 10. ¿Cómo reparar mi mongodb?
- 11. Conectando a MongoDB desde MATLAB
- 12. Cómo contar filas vacías al leer desde Excel
- 13. Generando archivo Excel desde HTML
- 14. Lectura desde excel usando oledbcommand
- 15. Guardar en Excel Desde JasperViewer
- 16. ¿Cómo conectar y consultar MySQL desde dentro de Lua?
- 17. Oracle sqldeveloper - cómo conectar DB desde la línea de comando
- 18. Cómo conectar al servidor remoto desde Aptana Studio 3
- 19. Inserte JSON en MongoDb directamente desde PHP
- 20. Puerto desde Entity Framework a MongoDB
- 21. SQL Developer para importar desde Excel
- 22. Abrir la aplicación de Excel desde Python
- 23. Ejecutar Excel Macro desde fuera de Excel mediante VBScript desde la línea de comandos
- 24. Pegar desde Excel a WPF DataGrid
- 25. ¿Cómo acceder directamente a MongoDB API desde Mongoid?
- 26. Exportar a Excel desde un repetidor?
- 27. ¿Cómo conectar SQLite con Java?
- 28. ¿Cómo generar XML desde una macro de Excel VBA?
- 29. Cómo generar un archivo Excel * .xls desde ASP clásico
- 30. Cómo acceder a Checkbox desde VBA en Excel 2007
Desde hace casi tanto tiempo como se formuló esta pregunta, un ticket ha existido en el rastreador de MongoDB solicitando el lo mismo: https://jira.mongodb.org/browse/SERVER-2 063 –