Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


hur spara fil snabbare? tar för lång tid

Postades av 2006-05-15 09:26:20 - Niklas Wallstrom, i forum vb.net, Tråden har 13 Kommentarer och lästs av 908 personer

hallå
jag har ett litet obekvämt problem när jag sparar undan data till en .xls-fil.

Frågan lyder:
varför tar det >1min att spara filen?

Jag har en savefiledialog så användaren kan välja vart och med vilket namn filen sparas. Det tar mer än en minut från det att jag trycker på "Spara" tills dess att savefiledialog öppnas. Finns det nån effektivisering att göra?

tacksam för hjälp

skickar med en bit av koden:

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
Dim SlaveX As Integer
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet1, xlSheet2, xlSheet3, xlSheet4, xlSheet5, xlsheet6 As Excel.Worksheet
xlApp = New Excel.Application
xlBook = xlApp.Workbooks.Open("C:\Documents and Settings\nwallstr\Desktop\VB infotiv\WindowsApplication1\template.xls")
'egen template-fil i samma katalog

xlSheet1 = CType(xlBook.Worksheets(1), Excel.Worksheet)
xlSheet2 = CType(xlBook.Worksheets(2), Excel.Worksheet)
xlSheet3 = CType(xlBook.Worksheets(3), Excel.Worksheet)
xlSheet4 = CType(xlBook.Worksheets(4), Excel.Worksheet)
xlSheet5 = CType(xlBook.Worksheets(5), Excel.Worksheet)
xlSheet6 = CType(xlBook.Worksheets(6), Excel.Worksheet)

'Simulation mode / Real mode
If RadioButtonSimulationMode.Checked = True Then
xlSheet1.Cells(3, 2) = "Simulation Mode"
Else
xlSheet1.Cells(3, 2) = "Real Mode"
End If

'Det.en settings
xlSheet1.Cells(7, 3) = TextBoxWDetEn1.Text
xlSheet1.Cells(8, 3) = TextBoxWDetEn2.Text
xlSheet1.Cells(9, 3) = TextBoxWDetEn3.Text
xlSheet1.Cells(10, 3) = TextBoxWDetEn4.Text
xlSheet1.Cells(11, 3) = TextBoxWDetEn5.Text
xlSheet1.Cells(12, 3) = TextBoxWDetEn6.Text
xlSheet1.Cells(13, 3) = TextBoxWDetEn7.Text
xlSheet1.Cells(14, 3) = TextBoxWDetEn8.Text
xlSheet1.Cells(15, 3) = TextBoxWDetEn9.Text
xlSheet1.Cells(16, 3) = TextBoxWDetEn10.Text
xlSheet1.Cells(17, 3) = TextBoxWDetEn11.Text
xlSheet1.Cells(18, 3) = TextBoxWDetEn12.Text
xlSheet1.Cells(19, 3) = TextBoxWDetEn13.Text
xlSheet1.Cells(20, 3) = TextBoxWDetEn14.Text
xlSheet1.Cells(21, 3) = TextBoxWDetEn15.Text
xlSheet1.Cells(22, 3) = TextBoxWDetEn16.Text
xlSheet1.Cells(23, 3) = TextBoxWDetEn17.Text
xlSheet1.Cells(24, 3) = TextBoxWDetEn18.Text
xlSheet1.Cells(25, 3) = TextBoxWDetEn19.Text
xlSheet1.Cells(26, 3) = TextBoxWDetEn20.Text
xlSheet1.Cells(27, 3) = TextBoxWDetEn21.Text

'Squib Settings
xlSheet1.Cells(7, 4) = TextBoxWSquib1.Text
xlSheet1.Cells(8, 4) = TextBoxWSquib2.Text
xlSheet1.Cells(9, 4) = TextBoxWSquib3.Text
xlSheet1.Cells(10, 4) = TextBoxWSquib4.Text
xlSheet1.Cells(11, 4) = TextBoxWSquib5.Text
xlSheet1.Cells(12, 4) = TextBoxWSquib6.Text
xlSheet1.Cells(13, 4) = TextBoxWSquib7.Text
xlSheet1.Cells(14, 4) = TextBoxWSquib8.Text
xlSheet1.Cells(15, 4) = TextBoxWSquib9.Text
xlSheet1.Cells(16, 4) = TextBoxWSquib10.Text
xlSheet1.Cells(17, 4) = TextBoxWSquib11.Text
xlSheet1.Cells(18, 4) = TextBoxWSquib12.Text
xlSheet1.Cells(19, 4) = TextBoxWSquib13.Text
xlSheet1.Cells(20, 4) = TextBoxWSquib14.Text
xlSheet1.Cells(21, 4) = TextBoxWSquib15.Text
xlSheet1.Cells(22, 4) = TextBoxWSquib16.Text
xlSheet1.Cells(23, 4) = TextBoxWSquib17.Text
xlSheet1.Cells(24, 4) = TextBoxWSquib18.Text
xlSheet1.Cells(25, 4) = TextBoxWSquib19.Text
xlSheet1.Cells(26, 4) = TextBoxWSquib20.Text
xlSheet1.Cells(27, 4) = TextBoxWSquib21.Text

For SlaveX = 0 To 20
'squib results
xlSheet1.Cells(SlaveX + 7, 7) = 43 'TextBoxRDetYN(SlaveX)
xlSheet1.Cells(SlaveX + 7, 8) = 44 'TextBoxRECUEn(SlaveX)
xlSheet1.Cells(SlaveX + 7, 9) = 45 'TextBoxRDetTime(SlaveX)
xlSheet1.Cells(SlaveX + 7, 10) = 46 'TextBoxRPulseTime(SlaveX)
xlSheet1.Cells(SlaveX + 7, 11) = 47 'TextBoxRT0Time(SlaveX)
Next


' Place sensor readouts in the sheets
For SlaveX = 0 To 1799
'BRS
xlSheet2.Cells(SlaveX + 7, 2) = SlaveX * 0.228
xlSheet2.Cells(SlaveX + 7, 6) = SlaveX * 0.228
'xlSheet2.Cells(SlaveX + 7, 2) = ListViewBRSL.GetItemAt(SlaveX, 2)
Next

If RadioButtonBRSL8.Checked = True Then
xlSheet2.Cells(4, 2) = "8 bit data"
Else
xlSheet2.Cells(4, 2) = "10 bit data"
End If

If RadioButtonBRSR8.Checked = True Then
xlSheet2.Cells(4, 6) = "8 bit data"
Else
xlSheet2.Cells(4, 6) = "10 bit data"
End If

For SlaveX = 0 To 1799
'pSat
xlSheet3.Cells(SlaveX + 7, 2) = SlaveX * 0.224
xlSheet3.Cells(SlaveX + 7, 6) = SlaveX * 0.224
Next

If RadioButtonpSatL8.Checked = True Then
xlSheet3.Cells(4, 2) = "8 bit data"
Else
xlSheet3.Cells(4, 2) = "10 bit data"
End If
If RadioButtonpSatR8.Checked = True Then
xlSheet3.Cells(4, 6) = "8 bit data"
Else
xlSheet3.Cells(4, 6) = "10 bit data"
End If

For SlaveX = 0 To 1799
'UFS
xlSheet4.Cells(SlaveX + 7, 2) = SlaveX * 0.228
xlSheet4.Cells(SlaveX + 7, 6) = SlaveX * 0.228
Next
If RadioButtonUFSL8.Checked = True Then
xlSheet4.Cells(4, 2) = "8 bit data"
Else
xlSheet4.Cells(4, 2) = "10 bit data"
End If
If RadioButtonUFSR8.Checked = True Then
xlSheet4.Cells(4, 6) = "8 bit data"
Else
xlSheet4.Cells(4, 6) = "10 bit data"
End If

For SlaveX = 0 To 1799
'PAS Front
xlSheet5.Cells(SlaveX + 7, 2) = SlaveX * 0.228
xlSheet5.Cells(SlaveX + 7, 6) = SlaveX * 0.228
Next
If RadioButtonPASFL8.Checked = True Then
xlSheet5.Cells(4, 2) = "8 bit data"
Else
xlSheet5.Cells(4, 2) = "10 bit data"
End If
If RadioButtonPASFR8.Checked = True Then
xlSheet5.Cells(4, 6) = "8 bit data"
Else
xlSheet5.Cells(4, 6) = "10 bit data"
End If

For SlaveX = 0 To 1799
'PAS Rear
xlsheet6.Cells(SlaveX + 7, 2) = SlaveX * 0.228
xlsheet6.Cells(SlaveX + 7, 6) = SlaveX * 0.228
Next
If RadioButtonPASRL8.Checked = True Then
xlsheet6.Cells(4, 2) = "8 bit data"
Else
xlsheet6.Cells(4, 2) = "10 bit data"
End If
If RadioButtonPASRR8.Checked = True Then
xlsheet6.Cells(4, 6) = "8 bit data"
Else
xlsheet6.Cells(4, 6) = "10 bit data"
End If

' Create a SaveFileDialog to request a path and file name to save to.
Dim saveFile1 As New SaveFileDialog

' Initialize the SaveFileDialog to specify the extension for the file.
saveFile1.DefaultExt = "*.xls"
saveFile1.Filter = "Excel Files|*.xls"
saveFile1.Title = "Save present data from EMD"
' Determine if the user selected a file name from the saveFileDialog.
If (saveFile1.ShowDialog() = System.Windows.Forms.DialogResult.OK) _
And (saveFile1.FileName.Length) > 0 Then
' Save the contents into the file.
xlBook.SaveAs(saveFile1.FileName)
End If
saveFile1.Dispose()
xlApp.Quit() 'releases excel

End Sub


Svara

Sv: hur spara fil snabbare? tar för lång tid

Postades av 2006-05-15 11:00:18 - Ola Lindfeldt

Ja, du kan snabba upp detta avsevärt.

I de här looparna bör du inte anropa Excel för varje iteration:

<code>
For SlaveX = 0 To 1799
'PAS Rear
xlsheet6.Cells(SlaveX + 7, 2) = SlaveX * 0.228
xlsheet6.Cells(SlaveX + 7, 6) = SlaveX * 0.228
Next
</code>

Gör i stället en ny
Dim Sb1 As New System.Text.Stringbuilder()
för varje varv i loopen bygger du på en matris
som består av kolumner och rader som separeras med vbTab, vbCrLf
som du sedan <b>klistrar in</b> till Excel.
Ex om du har en tabell med två kolumner skapas en rad så här:
Sb1.Append("Cell1_value")
Sb1.Append(vbTab)
Sb1.Append("Cell2_value")
Sb1.Append(vbCrLf)
'Next

Till sist anropar du

EttRangeObjekt.Paste (Sb1.ToString)

'är inte hundra på syntaxen för Paste (kolla hjälpen)

Dvs, du ska jobba "chunky" inte "chatty"!

Generellt bör du också byta ut alla
xlsheet6.Cells(SlaveX + 7, 2) =
till
xlsheet6.Cells(SlaveX + 7, 2)<b>.Text</b> =




Svara

Sv:hur spara fil snabbare? tar för lång tid

Postades av 2006-05-15 14:53:04 - Niklas Wallstrom

tackar!
ska testa detta så snart jag får tid, men det låter ju väldigt vettigt att inte anropa xl cell för cell. Det är ju en del data som skall lagras, men jag blev förvånad när det tog SÅ lång tid...


Svara

Sv: hur spara fil snabbare? tar för lång tid

Postades av 2006-05-15 17:43:34 - Ola Lindfeldt

Anledningen till att det är så segt är framför all com-interop. Dvs när .NET ska prata med Excel som är COM/ActiceX så måste varje anrop översättas mellan olika lager. Bl.a. för att det är helt olika typer av minneshantering i de båda miljöerna. T.ex. kodraden:
xlsheet6.Cells(SlaveX + 7, 2) = SlaveX * 0.228
orsakar väldigt mycket mer kod "bakom kulisserna".

Därför ska man anropa Excel "Chunky" = flytta mycket data samtidigt.
I stället för "Chatty" = många anrop på rad.


Svara

Sv:hur spara fil snabbare? tar för lång tid

Postades av 2006-05-17 16:00:15 - Niklas Wallstrom

har gjort några försök nu... en del har klarnat, men inte allt tyvärr.

problemet ligger i radbyte och tabb

har delvis försökt med vbTab, vbCrLf och chr(9), chr(13).
resultatet i .xls blir att HELA sb1 hamnar i samma cell med fyrkanter där jag vill ha enter och tabb

kan bero på att jag inte får paste-grejen att fungera riktigt

testade detta utan framgång:

<code>
Dim xlSettings As New System.Text.StringBuilder
xlSettings.Append(TextBoxWDetEn20.Text)
xlSettings.Append(Chr(9))
xlSettings.Append(TextBoxWSquib20.Text)
xlSettings.Append(Chr(13))
xlSheet1.Paste(xlSheet1.Cells(7, 3), xlSquibSettings.ToString)
</code>

kan inte förstå vad det skall stå på nedersta raden för att det ska funka bra...


Svara

Sv: hur spara fil snabbare? tar för lång tid

Postades av 2006-05-17 16:07:36 - Niklas Jansson

Du kan antingen använda TextToColumns eller så kan du skapa en Variant-array som du istället skriver rakt in.


Svara

Sv:hur spara fil snabbare? tar för lång tid

Postades av 2006-05-17 16:29:33 - Niklas Wallstrom

Var skulle jag använda texttocolumns? kan inte hitta uttrycket i hjälpen ens.


Svara

Sv: hur spara fil snabbare? tar för lång tid

Postades av 2006-05-17 19:31:41 - Niklas Jansson

Öh...

Antingen Range.TextToColumns med dess argument, eller på Data->Text to columns alt. dess svenska motsvarighet.


Svara

Sv:hur spara fil snabbare? tar för lång tid

Postades av 2006-05-18 09:22:31 - Ola Lindfeldt

.Range("A1").Select
.ActiveSheet.Paste



Svara

Sv: hur spara fil snabbare? tar för lång tid

Postades av 2006-05-18 10:01:18 - Andreas Paulsson

Det absolut snabbaste sättet (som jag har fattat det) att skapa Office-dokument är att första skapa XML-dokument, ladda in det i Excel och sedan spara det som xls.

Litet bökigare (en massa Office-XML-hantering), och kräver Office 2003 men ger bäst prestanda eftersom COM-interop-bitarna minimeras.

Jag har gjort det med Word och det fungerade mycket bra.

/Andreas


Svara

Sv:hur spara fil snabbare? tar för lång tid

Postades av 2006-05-18 10:59:02 - Ola Lindfeldt

Det är inte så dumt. Excel-XML finns även i Office XP. (testa att spara som XML i Excel..)



Svara

Sv: hur spara fil snabbare? tar för lång tid

Postades av 2006-05-18 16:27:37 - Niklas Wallstrom

okej... jag är inte överdrivet bevandrad med detta språket och som Jansson antyder är jag helt dum i huvet.

När jag försöker använda paste så klistras mycket riktigt nånting in där jag vill, men det som klistras in är det jag senast kopierade INNAN jag startade programmet.
Tänkte då lite smått med att på nåt sätt använda mig av Copy. Jag får inga felmeddelanden, men det jag ville kopiera har inte kopierats så det som klistras in blir FORTFARANDE det jag senast kopierade INNAN jag startade programmet.
Är det så svårt att hjälpa mig med den nedersta raden?

Jag vill ha matrisen med början i cell C7, sen ska det tabbas och bytas rad nedåt åt höger.
Det som skall stå i matrisen är de siffror/strängar som jag lagt i xlSettings med tab och carriage return.

Mitt excelark heter xlSheet1.


Svara

Sv:hur spara fil snabbare? tar för lång tid

Postades av 2006-05-19 10:30:19 - Ola Lindfeldt

Niklas, jag glömde en "liten detalj".
Du måste sätta data i Clipboarden först, från ditt .Net-program:
Clipboard.SetDataObject("aaa" & vbTab & "bbb")


Svara

Sv: hur spara fil snabbare? tar för lång tid

Postades av 2006-05-22 12:08:05 - Niklas Wallstrom

Yeijh!

<code>
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet1 As Excel.Worksheet
xlApp = New Excel.Application
xlBook = xlApp.Workbooks.Open("C:\WindowsApplication1\template.xls")
xlSheet1 = CType(xlBook.Worksheets(1), Excel.Worksheet)
Dim xlSettings As New System.Text.StringBuilder
xlSettings.Append(TextBox1.Text)
xlSettings.Append(vbTab)
xlSettings.Append(TextBox2.Text)
xlSettings.Append(vbCrLf)
xlSettings.Append(TextBox3.Text)
Clipboard.SetDataObject(xlSettings.ToString)
xlSheet1.Range("C7").Select()
xlSheet1.Paste()
</code>

trodde motsatsen till paste var copy. men nu funkar det!
tack ola


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
340
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies