Excel: import dat z cvs



Ahoj, mám excel protokol s tlačítkem, do kterýho importuju data z csv. Ale to csv má pokaždé jiný název listu, který budu importovat a ten list v tom csv je pouze jen jeden. O co mi jde: 1. jak napsat, že má vybrat list ať má jakýkoliv název?2. v tom csv je výstup dat, který má 3 sloupce do jednoho sloučeného a já ho chci rozdělit na 3 samostatný sloupce a ty importovat do toho protokolu. Sub Generate()With Application .ScreenUpdating = False .DisplayAlerts = FalseEnd WithApplication.DisplayAlerts = False With Application.FileDialog(msoFileDialogFilePicker) .InitialFileName = "C:\" .Title = "Choose trace export" .Filters.Add "Soubory Excelu (xls/xlsx/csv)", "*.xl*", 1  .Show If  .SelectedItems.Count = 0 Then MsgBox "No files loaded": Exit Sub ElseIf .SelectedItems.Count > 1 Then MsgBox "Choose only one file!": Exit Sub Else zdrojovy\_soubor = .SelectedItems(1) End If End With Workbooks.Open (zdrojovy\_soubor)  docasna = ActiveWorkbook.Worksheets("pokaždé je jiný název listu").Range("A2:")  ActiveWorkbook.Close  ThisWorkbook.Activate  Worksheets("pokus").Range("A3") = docasna  Application.DisplayAlerts = TrueEnd Sub
Zasa niekto, kto vobec netusi ktora bije. Motas piate cez deviate.Nieco si o tom nastuduj. CSV je cisto textovy format, do ktoreho sa da ale ulozit iba excel ktory ma iba 1 list.Prave preto, ze v CSV iba zoznam hodnot stlpcov z jednotlivych riadkov oddelenych oddelovacim znakom, defaultne to byva strednik ";"Takze v CSV ziadny nazov listu nie je.T.j. riadok vyzera asi takto Honza Novy;Praha;16000;Dejvicka.Este moze byt, ze prvy riadok v subore su nazvy stlpcov a nie ciste data.Ak su v nejakom stlpci sdruzene data, tak na to musis napisat nejaky kod, ktory tie data sprave rozdeli - najpravdepodobnejsie pomocou substring.
Můžete zkopírovat seznam a vložit ho do jiného sešitu aplikace Excel. Takže jste se ptali, jak zvládnout práci na násobku „úkolů“ najednou, ne? S výjimkou větvení.


Můžete mít více checkouts ze zdroje na lokálním počítači, suffixing název adresáře s názvem lístku, na kterém pracujete. Jen se ujistěte, aby se změny ve správném adresáři, v závislosti na úkolu ...


Směšování více úkolů v jedné pracovní kopii / commit může být velmi matoucí, zvláště pokud někdo potřebuje, aby svou práci zkontrolovat později. <p>příkaz <code>merge</code> má složitou syntaxi a ještě složitější implementaci, ale v zásadě jde o spojení dvou tabulek, filtrování dolů na řádky, které je třeba změnit (vložit, aktualizovat nebo smazat), a poté provést požadované změny. vzhledem k těmto vzorovým údajům:</p><pre><code>declare @categoryitem as table ( categoryid integer not null, itemid integer not null, primary key (categoryid, itemid), unique (itemid, categoryid) ); declare @datasource as table ( categoryid integer not null, itemid integer not null primary key (categoryid, itemid) ); insert @categoryitem (categoryid, itemid) values (1, 1), (1, 2), (1, 3), (2, 1), (2, 3), (3, 5), (3, 6), (4, 5); insert @datasource (categoryid, itemid) values (2, 2); </code></pre><p><strong> cíl </strong></p><pre><code>╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 1 ║ 1 ║ ║ 2 ║ 1 ║ ║ 1 ║ 2 ║ ║ 1 ║ 3 ║ ║ 2 ║ 3 ║ ║ 3 ║ 5 ║ ║ 4 ║ 5 ║ ║ 3 ║ 6 ║ ╚════════════╩════════╝ </code></pre><p><strong> zdroj </strong></p><pre><code>╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 2 ║ 2 ║ ╚════════════╩════════╝ </code></pre><p>požadovaným výsledkem je nahrazení dat v cíli daty ze zdroje, ale pouze pro <code>categoryid = 2</code>. po výše uvedeném popisu <code>merge</code> bychom měli napsat dotaz, který spojuje zdroj a cíl pouze na klíče, a filtrovat řádky pouze v klauzulích <code>when</code>:</p><pre><code>merge into @categoryitem as target using @datasource as source on source.itemid = target.itemid and source.categoryid = target.categoryid when not matched by source and target.categoryid = 2 then delete when not matched by target and source.categoryid = 2 then insert (categoryid, itemid) values (categoryid, itemid) output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>to dává následující výsledky:</p><pre><code>╔═════════╦════════════╦════════╗ ║ $action ║ categoryid ║ itemid ║ ╠═════════╬════════════╬════════╣ ║ delete ║ 2 ║ 1 ║ ║ insert ║ 2 ║ 2 ║ ║ delete ║ 2 ║ 3 ║ ╚═════════╩════════════╩════════╝ ╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 1 ║ 1 ║ ║ 1 ║ 2 ║ ║ 1 ║ 3 ║ ║ 2 ║ 2 ║ ║ 3 ║ 5 ║ ║ 3 ║ 6 ║ ║ 4 ║ 5 ║ ╚════════════╩════════╝ </code></pre><p>realizační plán je: <img src="https://i.stack.imgur.com/fovhu.jpg" alt="merge plan"></p><p>všimněte si, že jsou obě tabulky plně naskenovány. můžeme to považovat za neefektivní, protože pouze řádky, kde <code>categoryid = 2</code> bude ovlivněno v cílové tabulce. zde přicházejí varování v books online. jeden chybný pokus o optimalizaci, aby se dotkl pouze nezbytných řádků v cíli, je:</p><pre><code>merge into @categoryitem as target using ( select categoryid, itemid from @datasource as ds where categoryid = 2 ) as source on source.itemid = target.itemid and target.categoryid = 2 when not matched by target then insert (categoryid, itemid) values (categoryid, itemid) when not matched by source then delete output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>logika v klauzuli <code>on</code> je použita jako součást spojení. v tomto případě je spojení úplným vnějším spojením (viz <a href="http://technet.microsoft.com/en-us/library/bb522522%28v=sql.105%29.aspx">tento záznam books online</a> proč). použití kontroly kategorie 2 na cílových řádcích jako součásti vnějšího spojení nakonec povede k odstranění řádků s jinou hodnotou (protože neodpovídají zdroji):</p><pre><code>╔═════════╦════════════╦════════╗ ║ $action ║ categoryid ║ itemid ║ ╠═════════╬════════════╬════════╣ ║ delete ║ 1 ║ 1 ║ ║ delete ║ 1 ║ 2 ║ ║ delete ║ 1 ║ 3 ║ ║ delete ║ 2 ║ 1 ║ ║ insert ║ 2 ║ 2 ║ ║ delete ║ 2 ║ 3 ║ ║ delete ║ 3 ║ 5 ║ ║ delete ║ 3 ║ 6 ║ ║ delete ║ 4 ║ 5 ║ ╚═════════╩════════════╩════════╝ ╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 2 ║ 2 ║ ╚════════════╩════════╝ </code></pre><p>kořenová příčina je ze stejného důvodu, proč se predikáty chovají v klauzuli vnější spojení <code>on</code> odlišně, než když jsou specifikovány v klauzuli <code>where</code>. syntaxe <code>merge</code> (a implementace spojení v závislosti na zadaných klauzulích) jen ztěžují vidět, že tomu tak je.</p><p> <a href="http://technet.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx">navádění v books online</a> (rozšířeno v položce <a href="http://technet.microsoft.com/en-us/library/cc879317%28v=sql.105%29.aspx">optimizing performance</a> ) nabízí navádění, které zajistí, že správná sémantika je vyjádřena pomocí syntaxe <code>merge</code>, aniž by uživatel nutně musel muset pochopit všechny podrobnosti implementace nebo zohlednit způsoby, kterými by optimalizátor mohl legitimně přeskupit věci z důvodů efektivnosti provádění.</p><p>dokumentace nabízí tři možné způsoby implementace časného filtrování:</p><p><strong> zadání podmínky filtrování v klauzuli <code>when</code> </strong> zaručuje správné výsledky, ale může znamenat, že více řádků je čteno a zpracováno ze zdroje a cíle tabulky, než je nezbytně nutné (viz první příklad).</p><p><strong> aktualizace prostřednictvím zobrazení </strong>, která obsahuje podmínku filtrování, také zaručuje správné výsledky (protože změněné řádky musí být přístupné pro aktualizaci prostřednictvím zobrazení), ale vyžaduje to vyhrazené zobrazení, které splňuje liché podmínky pro aktualizaci zobrazení.</p><p><strong> použití společného výrazu tabulky </strong> přináší podobné riziko při přidávání predikátů k klauzuli <code>on</code>, ale z poněkud odlišných důvodů. v mnoha případech to bude bezpečné, ale vyžaduje to odbornou analýzu prováděcího plánu, aby se to potvrdilo (a rozsáhlé praktické testování). například:</p><pre><code>with target as ( select * from @categoryitem where categoryid = 2 ) merge into target using ( select categoryid, itemid from @datasource where categoryid = 2 ) as source on source.itemid = target.itemid and source.categoryid = target.categoryid when not matched by target then insert (categoryid, itemid) values (categoryid, itemid) when not matched by source then delete output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>výsledkem jsou správné výsledky (neopakované) s optimálnějším plánem:</p><p><img src="https://i.stack.imgur.com/tazmk.jpg" alt="merge plan 2"></p><p>plán čte pouze řádky pro kategorii 2 z cílové tabulky. to může být důležitým hlediskem výkonu, pokud je cílová tabulka velká, ale je příliš snadné tuto chybu získat pomocí syntaxe <code>merge</code>.</p><p>někdy je snazší zapsat <code>merge</code> jako samostatné operace dml. tento přístup může dokonce <strong> vést lépe </strong> než jediný <code>merge</code>, což je skutečnost, která lidi často překvapuje.</p><pre><code>delete ci from @categoryitem as ci where ci.categoryid = 2 and not exists ( select 1 from @datasource as ds where ds.itemid = ci.itemid and ds.categoryid = ci.categoryid ); insert @categoryitem select ds.categoryid, ds.itemid from @datasource as ds where ds.categoryid = 2; </code></pre> <p>přiznávám, že jsem to nikdy předtím neudělal, takže došlo k trochu poškrábání hlavy. jednoduchá ukázková tabulka, která demonstruje:</p><pre><code>if exists (select * from sys.objects where object\_id = object\_id(n'[dbo].[mytable]') and type in (n'u')) drop table [dbo].[mytable] go create table dbo.mytable ( col1 int , col2 char(1) ) go insert dbo.mytable (col1, col2) values (1, 'a') insert dbo.mytable (col1, col2) values (1, 'b') insert dbo.mytable (col1, col2) values (1, 'c') insert dbo.mytable (col1, col2) values (2, 'a') insert dbo.mytable (col1, col2) values (2, 'b') insert dbo.mytable (col1, col2) values (2, 'c') insert dbo.mytable (col1, col2) values (3, 'a') insert dbo.mytable (col1, col2) values (3, 'b') insert dbo.mytable (col1, col2) values (3, 'c') </code></pre><p>pomocí parametru @sortstyle k rozlišení objednávek řazení se @sortstyle = 1 třídí podle <code>col1 asc, col2 desc</code> a @ sortstyle = 2 seřadit podle <code>col2 desc, col1 asc</code>.</p><pre><code>declare @sortstyle int set @sortstyle = 1 select col1 , col2 from dbo.mytable order by case when @sortstyle = 1 then col1 end asc, case when @sortstyle = 1 then col2 end desc, case when @sortstyle = 2 then col2 end desc, case when @sortstyle = 2 then col1 end asc set @sortstyle = 2 select col1 , col2 from dbo.mytable order by case when @sortstyle = 1 then col1 end asc, case when @sortstyle = 1 then col2 end desc, case when @sortstyle = 2 then col2 end desc, case when @sortstyle = 2 then col1 end asc </code></pre><p> <a href="https://dba.stackexchange.com/questions/4104/how-do-you-order-by-a-parameter/4111#4111">jak se objednáváte parametrem</a> pokrývá jednodušší případ třídění podle 1 sloupce.</p> <p>jsou zde dva společné a související význam tabulek symbolů.</p><p>nejdříve je ve vašich souborech objektů tabulka symbolů. obvykle kompilátor c nebo c++ kompiluje jeden zdrojový soubor do souboru objektu s příponou .obj nebo .o. obsahuje kolekci spustitelného kódu a dat, které může linker zpracovat do pracovní aplikace nebo sdílené knihovny. soubor objektu má v něm datovou strukturu nazvanou tabulku symbolů, která mapuje různé položky v souboru objektu na názvy, kterým může linker porozumět. pokud zavoláte funkci z vašeho kódu, kompilátor do souboru objektu neuvede konečnou adresu rutiny. místo toho vloží do kódu hodnotu zástupného symbolu a přidá poznámku, která říká linkerovi, aby vyhledal odkaz v různých tabulkách symbolů ze všech souborů objektů, které zpracovává, a umístí tam konečné umístění.</p><p>za druhé, je zde také tabulka symbolů ve sdílené knihovně nebo dll. to je vytvořeno linkerem a slouží k pojmenování všech funkcí a datových položek, které jsou viditelné pro uživatele knihovny. to umožňuje systému provádět propojování běhu a řešit otevřené odkazy na tyto názvy na místo, kde je knihovna načtena do paměti.</p><p>pokud se chcete dozvědět více, doporučuji vynikající knihu johna levina &quot;linkers and loaders&quot; . <a href="http://books.google.com/books?id=h34d\_jr2iikc&amp;dq=levine+linkers+and+loaders&amp;pg=pp1&amp;ots=ixgckqo03w&amp;sig=dduacrrhk6e2nmlktxbnedpwbtg&amp;hl=en&amp;sa=x&amp;oi=book\_result&amp;resnum=1&amp;ct=result">link text</a> </p> Často toto je provedeno pomocí [„Data Driven odběry“](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , ale tato funkce je k dispozici pouze v některých SQL vydáních: Enterprise a Business Intelligence, ale ne v normě.


Takže existuje celá řada kreativních řešení. Ale nemám rád žádné z nich, a všechny vyžadují spravedlivý trochu práce mimo SSRS.


Mezi řešení, které jsem viděl, patří: Vytvoření odběr a potom zakázání nebo povolení SQL úlohu, kterou odešle předplatné (identifikovatelné podle GUID).


Vytvořte si .NET obálky exe zvládnout odeslání e-mailu. Je možné spustit dotaz nejprve zjistit, kolik se vrací řádky, a pak v případě potřeby generovat zprávu a zahrnout do e-mailu. <p>mám sklon souhlasit se svým šéfem :) možná, že skutečná aplikace má jiný pocit, ale podle vzhledu makety se nezdá být velmi elegantní.</p><p>co se stane, když po výběru podkategorie změním kategorii, resetuje se tato podkategorie? a pokud vyberu několik kategorií, obsahuje rozbalovací nabídka podkategorie podkategorie všech kategorií, které jsem vybral?</p><p>výběr několika kategorií současně vyžaduje hodně práce, protože rozevírací seznam se po kliknutí zavře a je třeba jej znovu otevřít po každé přidané položce a znovu ji naskenovat, abyste našli další potřebnou položku.</p><p>vaše odpověď zní jako rozevírací/vyskakovací strom se zaškrtávacími políčky.</p> <p>x11 má několik dostupných schránek. ve výchozím nastavení <code>xclip</code> umisťuje data do vyrovnávací paměti primárního výběru. chcete-li jej vložit, použijte prostřední kliknutí.</p><p>pokud chcete použít <kbd>ctrl</kbd>+<kbd>v</kbd>, použijte <code>xclip -selection clipboard</code>. viz <code>man xclip</code> pro více informací.</p><p> <a href="http://standards.freedesktop.org/clipboards-spec/clipboards-latest.txt">freedesktop.org</a> jsou dobré informace o různých schránkách.</p> <p>ne, tady opravdu nejsou žádné zkratky. prozkoumejte věci v následujícím pořadí:</p><ol> <li>zkontrolujte název postupu.</li> <li>zkontrolujte počet parametrů.</li> <li>zkontrolujte typy parametrů.</li> <li>zkontrolujte názvy parametrů.</li> </ol> <p>v ssms musíte změnit některé možnosti:</p><p>nástroje - možnosti - výsledky dotazu - sql server - výsledky do mřížky (nebo textu) -&gt; <strong>při kopírování nebo ukládání výsledků uveďte záhlaví sloupců</strong>.</p><p>změněná nastavení se použijí na nová, ale ne existující okna dotazů.</p>