Ich arbeite an einem SQL, um den Excel -Berichtsgenerator zu erzielen. Das Frontend ist stromloziert, und wie sie funktioniert, fügen Sie Ihre Abfrage in das Abfragungsfeld auf Streamlit mit einem Header -Header ein, führen die Abfrage aus und generieren eine Excel -Arbeitsmappe mit Blatt1. Sie können mehrere Abfragen in mehreren Blöcken haben, aber das Problem besteht darin, dass ich mit komplexen Abfragen arbeite, und die Abfragen umfassen normalerweise eine Reihe von Tempentabellen, und dann werden Daten aus diesen Temperaturtabellen in die Excel -Tabelle extrahiert. Mein Code funktioniert auf localhost in Microsoft SQL Server Management Studio 18, aber sobald ich eine Verbindung zu einem Server herstellt, gibt meine App einen Fehler zurück, in dem es heißt: < /p>
Fehlergenerierung Bericht: Dieses Ergebnisobjekt gibt keine Zeilen zurück. Es wurde automatisch geschlossen.
import pandas as pd
from sqlalchemy import create_engine, text
import time
import re
from pyexcelerate import Workbook
def parse_query_blocks(query):
parts = re.split(r"--\s*sheet:\s*(.+)", query)
blocks = []
for i in range(1, len(parts), 2):
sheet_name = parts[i].strip()
sql_block = parts[i + 1].strip()
queries = [q.strip() for q in sql_block.split(";") if q.strip()]
blocks.append((sheet_name, queries))
return blocks
def generate_dynamic_reports(engine, sheet_query_blocks, output_file):
start_time = time.time()
all_setup_queries = []
sheet_selects = []
for sheet_name, queries in sheet_query_blocks:
final_select = None
for q in reversed(queries):
if q.strip().lower().startswith("select"):
final_select = q
break
if not final_select:
raise ValueError(f"No SELECT query found for sheet: {sheet_name}")
non_selects = [q for q in queries if q != final_select]
all_setup_queries.extend(non_selects)
sheet_selects.append((sheet_name, final_select))
wb = Workbook()
with engine.connect() as conn:
try:
if all_setup_queries:
for q in all_setup_queries:
conn.execute(text(q))
print(f"[{round(time.time() - start_time, 2)}s] ✅ Executed all setup queries")
for sheet_name, select_query in sheet_selects:
print(f"[{round(time.time() - start_time, 2)}s] 🔍 Running SELECT for: {sheet_name}")
df = pd.read_sql(text(select_query), conn)
df.fillna("NULL", inplace=True)
data = [df.columns.tolist()] + df.values.tolist()
wb.new_sheet(sheet_name[:31], data=data)
print(f"[{round(time.time() - start_time, 2)}s] 📄 Wrote sheet: {sheet_name} ({len(df)} rows)")
except Exception as e:
print(f"❌ Error generating report: {e}")
raise e
wb.save(output_file)
print(f"[{round(time.time() - start_time, 2)}s] ✅ All sheets exported to {output_file}")
< /code>
Bearbeiten: < /p>
Ich kann die von mir verwendete Abfrage teilen. Leider kann ich den Fehler derzeit nicht replizieren, da ich keine Berechtigungen zur Verbindung zu der SQL Server -Umgebung habe, in der das [url=viewtopic.php?t=26065]Problem[/url] ursprünglich aufgetreten ist. Wenn ich die gleiche Abfrage lokal auf localhost \ sqlexpress ausführe, funktioniert es perfekt-keine Fehler und die Tabellenkalkulationsausgabe wird korrekt erzeugt.
--sheet: s1
DROP TABLE IF EXISTS #temp_orders;
DROP TABLE IF EXISTS #temp_discounts;
DROP TABLE IF EXISTS #temp_customers;
SELECT TOP 1000
item_id,
Customer_ID,
increment_id,
price,
grand_total,
discount_amount,
payment_method,
category_name_1,
created_at,
FY
INTO #temp_orders
FROM [Kaggletest].[dbo].[test_table]
WHERE ISNUMERIC(price) = 1 AND ISNUMERIC(grand_total) = 1;
SELECT
item_id,
Customer_ID,
increment_id,
discount_amount,
price
INTO #temp_discounts
FROM #temp_orders
WHERE discount_amount > 0;
SELECT
Customer_ID,
COUNT(*) AS total_orders,
SUM(grand_total) AS total_spent,
AVG(price) AS avg_price
INTO #temp_customers
FROM #temp_orders
GROUP BY Customer_ID;
SELECT * FROM #temp_orders;
--sheet: s2
SELECT * FROM #temp_discounts;
--sheet: s3
SELECT * FROM #temp_customers;
Ich arbeite an einem SQL, um den Excel -Berichtsgenerator zu erzielen. Das Frontend ist stromloziert, und wie sie funktioniert, fügen Sie Ihre Abfrage in das Abfragungsfeld auf Streamlit mit einem Header -Header ein, führen die Abfrage aus und generieren eine Excel -Arbeitsmappe mit Blatt1. Sie können mehrere Abfragen in mehreren Blöcken haben, aber das [url=viewtopic.php?t=26065]Problem[/url] besteht darin, dass ich mit komplexen Abfragen arbeite, und die Abfragen umfassen normalerweise eine Reihe von Tempentabellen, und dann werden Daten aus diesen Temperaturtabellen in die Excel -Tabelle extrahiert. Mein Code funktioniert auf localhost in Microsoft SQL Server Management Studio 18, aber sobald ich eine Verbindung zu einem Server herstellt, gibt meine App einen Fehler zurück, in dem es heißt: < /p>
Fehlergenerierung Bericht: Dieses Ergebnisobjekt gibt keine Zeilen zurück. Es wurde automatisch geschlossen.[code]import pandas as pd from sqlalchemy import create_engine, text import time import re from pyexcelerate import Workbook
def parse_query_blocks(query):
parts = re.split(r"--\s*sheet:\s*(.+)", query) blocks = [] for i in range(1, len(parts), 2): sheet_name = parts[i].strip() sql_block = parts[i + 1].strip() queries = [q.strip() for q in sql_block.split(";") if q.strip()] blocks.append((sheet_name, queries)) return blocks
for sheet_name, queries in sheet_query_blocks: final_select = None for q in reversed(queries): if q.strip().lower().startswith("select"): final_select = q break if not final_select: raise ValueError(f"No SELECT query found for sheet: {sheet_name}")
non_selects = [q for q in queries if q != final_select] all_setup_queries.extend(non_selects) sheet_selects.append((sheet_name, final_select))
wb = Workbook()
with engine.connect() as conn:
try:
if all_setup_queries: for q in all_setup_queries: conn.execute(text(q))
print(f"[{round(time.time() - start_time, 2)}s] ✅ Executed all setup queries")
for sheet_name, select_query in sheet_selects: print(f"[{round(time.time() - start_time, 2)}s] 🔍 Running SELECT for: {sheet_name}") df = pd.read_sql(text(select_query), conn) df.fillna("NULL", inplace=True)
data = [df.columns.tolist()] + df.values.tolist() wb.new_sheet(sheet_name[:31], data=data) print(f"[{round(time.time() - start_time, 2)}s] 📄 Wrote sheet: {sheet_name} ({len(df)} rows)")
except Exception as e: print(f"❌ Error generating report: {e}") raise e
wb.save(output_file) print(f"[{round(time.time() - start_time, 2)}s] ✅ All sheets exported to {output_file}") < /code> Bearbeiten: < /p> Ich kann die von mir verwendete Abfrage teilen. Leider kann ich den Fehler derzeit nicht replizieren, da ich keine Berechtigungen zur Verbindung zu der SQL Server -Umgebung habe, in der das [url=viewtopic.php?t=26065]Problem[/url] ursprünglich aufgetreten ist. Wenn ich die gleiche Abfrage lokal auf localhost \ sqlexpress ausführe, funktioniert es perfekt-keine Fehler und die Tabellenkalkulationsausgabe wird korrekt erzeugt. --sheet: s1 DROP TABLE IF EXISTS #temp_orders; DROP TABLE IF EXISTS #temp_discounts; DROP TABLE IF EXISTS #temp_customers;
SELECT TOP 1000 item_id, Customer_ID, increment_id, price, grand_total, discount_amount, payment_method, category_name_1, created_at, FY INTO #temp_orders FROM [Kaggletest].[dbo].[test_table] WHERE ISNUMERIC(price) = 1 AND ISNUMERIC(grand_total) = 1;
SELECT item_id, Customer_ID, increment_id, discount_amount, price INTO #temp_discounts FROM #temp_orders WHERE discount_amount > 0;
SELECT Customer_ID, COUNT(*) AS total_orders, SUM(grand_total) AS total_spent, AVG(price) AS avg_price INTO #temp_customers FROM #temp_orders GROUP BY Customer_ID;
Ich habe eine Excel -Vorlage und einen C# -Code, der daran arbeitet, eine Datentabelle in einer Datei mit Closedxml.report
zu erstellen. Das Bit, das ich nicht ganz richtig erwerbe, ist Die...
Ich brauche Hilfe bei Jasper -Berichten. Aber oben und unten in einigen Zeilen wird der Inhalt abgeschnitten. net.sf.jasperreports.export.xls.auto.fit.row...
Verwendet jemand Apache Thrift in einer Swift-App? Die neueste Version von Thrift ist aufgrund von Änderungen in der Swift-Sprache, die hauptsächlich mit SSL-Serververbindungen zusammenhängen, nicht...
So verweisen Sie auf lokale application.yml anstelle anderer .yml -Dateien. Intellij nimmt standardmäßig application.yml. Ich möchte die Konfiguration ändern, um auf lokale YML zu verweisen, damit...