Diskuze: Kopírování textu z Excelu do textového dokumentu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 25 zpráv z 25.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Kdysi jsem si hral s necim podobnym. Nakonec jsem to poresil jinak. Excel si tusim pro kazdy radek uklada pocet otevrenych bunek. Muze se to lisit. Kdyz tam das 80, a on ma otevrenych 79, tak to vyhodi error.
1. Doporucuji zkusit googlem hledat jiz hotove scripty.
https://www.extendoffice.com/documents/excel/612-excel-export-data-to-text.html
Sub ExportRangetoFile()
'Update 20130913
Dim wb As Workbook
Dim saveFile As String
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb = Application.Workbooks.Add
WorkRng.Copy
wb.Worksheets(1).Paste
saveFile = Application.GetSaveAsFilename(fileFilter:="Text Files (*.txt), *.txt")
wb.SaveAs Filename:=saveFile, FileFormat:=xlText, CreateBackup:=False
wb.Close
Application.CutCopyMode = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
2. A nebo pouzij export do text/csv, to je take textovy format.
3. Excel umi ukladat makra, kde ti ulozi cely kod pro ulozeni do SaveAs txt,
pripadne oznaceni urcite oblasti a save as txt.
To jsem hodne pouzival, kdyz jsem potreboval vygenerovat z excelove tabulky
(text/csv export dat z naseho informacniho systemu) samostatne listy pro
uzivatele, aby nam tam doplnili schazejici udaje. Kazdy radek jako extra
formular. Formular jsem mel pripraveny, jen jsem kazdy radek rozkopirovat do
policek pro vyplneni. A pak jsem mel program, ktery zas vsechny ty formulare
sezbira a ulozi jako text/csv a ten pak kolega naimportoval do oracle databaze
pomoci sql prikazu a mozna nejakeho asp programu od jineho kolegu, to uz nevim.
Muj ukol byl vymyslet to s temi formulari.
Pisu to, abych te treba inspiraval, ze mozna delas neco zbytecne
komplikovane.
nejspíš se to pokusím vyřešit přes převedení do stringu, děkuju moc za rady!
i když jsem stále ztracený
Ahoj,
if ((ws.Cells[i].ToString() == "Z_KomSilnice_L (24200)/7 "))
skúšal si ToString()?
prípadne skús
ws.Range("A1:B1").Value
kde súradnice nahradíš ako potrebuješ
aktuálne nemám prístup k projektu kde to riešim, skúsim zajtra pozrieť
ahoj
ToString() jsem zkoušel a úplně bez výsledku
tak potom použi
ws.Range("A1").Value
súradnice si môžeš vyskladať ako potrebuješ
a mohu range nějak skombinovat s načtením jen do prázdné buňky a následně, aby to jelo od začátku další sloupec?
Budeš musieť vytvoriť 1 cyklus kde budeš riešiť stĺpec a v ňom druhý
čo bude riešiť riadok
Na stĺpec budeš potrebovať procedúru, kde budeš meniť index v cykluse na
súradnícu v súbore (0 = A, 1 = B...)
Niečo na tento štýl
for (int i = 0; i < 26; i++) //stlpce v subore, problem nastane po suradnici Z, kde zacinaju znova od AA, tam uz tento kod nebude fungovať
{
for (int j = 1; j < 100; j++) //riadky v subore (zaciname od 1, pretoze excel zacina suradnice od 1), pocet zmen podla seba
{
int prva = 65 + i; //priprava prvej suradnice (65 je ASCII kod pismena A)
string suradnice = ((char)prva).ToString() + j; //dokoncenie suradnice
//tvoj kod
}
}
using Microsoft.Office.Interop.Excel;
using _Excel = Microsoft.Office.Interop.Excel;
namespace WindowsFormsApp2
{
class Class1
{
string path = "";
_Application excel = new _Excel.Application();
Workbook wb;
Worksheet ws;
private object excelWorksheet;
public Class1(string path, int Sheet)
{
this.path = path;
wb = excel.Workbooks.Open(path);
ws = (Worksheet)wb.Worksheets[Sheet];
}
public string ReadCell(int i, int j)
{
for (int i = 0; i < 26; i++)
{
for (int j = 1; j < 100; j++)
{
int first = 65 + i;
string coordinates = ((char)first).ToString() + j;
string cellValue = (string)(excelWorksheet.Cells[i, j] as _Excel.Range).Value;
if (cellValue == "Z_KomSilnice_L (24200)/7 ")
{
return ws.Cells[i, j++];
}
else
return "";
}
}
}
}
}
dá se to použít takto? fakt jsem totálně zmatený
for (int i = 0; i < 26; i++)
{
for (int j = 1; j < 100; j++)
{
int first = 65 + i;
string coordinates = ((char)first).ToString() + j;
//takto to nejde??
if (ws.Range(coordinates).Value == "Z_KomSilnice_L (24200)/7 ")
{
return ws.Range(coordinates).Value;
}
else
return "";
}
}
píše mi to errory:
Error CS1955 Non-invocable member '_Worksheet.Range[object, object]' cannot be
used like a method.
Error CS0161 'Class1.ReadCell(int, int)': not all code paths return a value
Error CS0136 A local or parameter named 'i' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter stejně tak i pro "j"
public string ReadCell(int i, int j) //Error CS0136 = int i, int j mas nadeklarovane tu aj v cykle, toto zmen
{
for (int i = 0; i < 26; i++)
{
for (int j = 1; j < 100; j++)
{
int first = 65 + i;
string coordinates = ((char)first).ToString() + j;
if (ws.Range[coordinates].Value == "Z_KomSilnice_L (24200)/7 ") //CS1955, moja chyba, pisal som ti to tu z hlavy
{ //a vacsinou robim vo VB, maju tam byt hranate zatvorky, snad to uz pojde
return ws.Cells[i, j++];
}
else //Error CS0161 bude asi kvoli tej chybe CS1955
return "";
}
}
}
samozrejme, neviem ako mas zvysok kodu, ale tieto 3 problemy by sa mali dat lahko odstranit
máš pravdu byly to závorky a int, ale CS0161 stále zůstává
tak už jsem to rozjel ale žádnou hodnotu mi to nenašlo
if (ws.Range[coordinates].Value == "Z_KomSilnice_L (24200)/7 ")
{
return ws.Cells[i, j++]; //preco j inkrementujes? tahas riadok nizsie ako sa pytas, nechces radsej pouzit Range?
}
else
return "";
lenže i je stlpec, j ide o riadok nižšie
čiže musíš nanovo vyrobiť súradnice bunky
pohoda, stane sa komukolvek
tak jsem to překopal
public string ReadCell(int row, int column)
{
column += 1;
do
{
row++;
if (ws.Cells[row, column].Value == null)
break;
if (ws.Cells[row, column].Value.ToString() == "Z_KomSilnice_L (24200)/7 ")
{
return ws.Cells[row, column + 1].Value2.ToString();
}
} while (true);
return "";
ale nyní je zas problém s řádkem
if (ws.Cells[row, column].Value == null)
píše to chybu: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: System.__ComObject' does not contain a definition for 'Value'
Ok, tak poďme od začiatku,
3.
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Workbook xlWorkBook;
Worksheet xlWorkSheet;
xlWorkBook = xlApp.Workbooks.Open(path);
xlWorkSheet = xlWorkBook.ActiveSheet;
//mne to funguje bez zavahania, aj ked ja radsej pouzivam xlWorkSheet.Range["A1"].Value
if (xlWorkSheet.Cells[1, 1].Value == null)
break;
if (xlWorkSheet.Cells[1, 1].Value == "A")
xlWorkSheet.Cells[1, 1].Value = "B";
Začínám přemýšlet jestli nemám něco s excelem
Zobrazeno 25 zpráv z 25.