Tag: c#

WebAPI和angularJS JS文件下载 – 文件损坏

我在我的WebAPI中生成一个Excel文件。 我将它“存储”在一个内存stream中,然后放入响应中,如下所示: var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StreamContent(ms) }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = projectName + ".xlsx" }; // ms.Close(); return result; 它看起来像服务器端正在工作正确。 如果我正在将该内存stream写入文件stream,则会创build该文件并可以毫无问题地打开该文件。 在angular度方面,如何在点击button时重新创build文件? 我尝试了这样的事情: $scope.exportQuotas = function (projectName) { homeService.GetQuotas(projectName, $routeParams.token, $scope.selection).then( function (data) { var dataUrl = 'data:application/octet-stream;' + data var link […]

gridview数据导出到asp.net中的excel

我试图将网格视图数据转移到excel ….但输出是一个空白excel表。如何解决这个问题?是否有任何代码传输网格视图值Excel表与数据库? protected void btnexcel_Click1(object sender, EventArgs e) { Response.Clear(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.ms-excel"; StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); gvdetails.AllowPaging = false; gvdetails.DataBind(); gvdetails.HeaderRow.Style.Add("background-color", "#FFFFFF"); gvdetails.HeaderRow.Cells[0].Style.Add("background-color", "green"); gvdetails.HeaderRow.Cells[1].Style.Add("background-color", "green"); gvdetails.HeaderRow.Cells[2].Style.Add("background-color", "green"); for (int i = 0; i < gvdetails.Rows.Count;i++ ) { GridViewRow row […]

用C#在Excel中查找上次使用的行

可能重复: 如何获得Excel表格中占用的单元格的范围 我试图findExcel工作表中最后使用的行。 为了做到这一点,我使用这个代码: int lastUsedRow = currentWS.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell,Type.Missing).Row; 大多数情况下,它可以正常工作,但是有时候Excel会认为表单中的行数比假定的要多。 Fx:如果我将包含12行的sheet1的数据复制到一个空的sheet2,然后删除sheet2中的所有数据,通过右键单击并按下“Delete …”并将数据从sheet3(包含5行)复制到sheet2,然后lastUsedRow会给我12的值,应该是5。 上面的图像示例假设给我的值22作为行计数,而是我会得到634.注意滚动条的权利。 看起来像Excel认为,即使我刚刚删除所有单元格之前填充了一些单元格,然后将更less行的新数据复制到表单中。 是否有任何方法来“调整”工作表中的数据视图,以便我能得到正确数量的使用过的单元格,或者可能是另一种方法来查找最后使用的行数? 谢谢。

设置Excel电子表格列属性问题

我试图使用OpenXML框架在Excel电子表格中设置默认列宽,结果我得到了破损的文件。 这里是代码 private void initSpreadsheetDocument() { // Add a WorkbookPart to the spreadsheet document. WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); workbookpart.Workbook = new Workbook(); var sheetData = new SheetData(); var properties = new SheetFormatProperties { DefaultColumnWidth = 25D }; Worksheet worksheet = new Worksheet(); worksheet.AppendChild(sheetData); // here is line of code that corrupt file // without it […]

使用C#.NET查询Excel电子表格而不使用Jet OLE DB

有没有办法查询Excel 2010电子表格,而不使用Jet或导出为CSV和查询CSV文件。 我无法使用Jet的原因是因为应用程序需要在Windows Server 2008 R2上作为Web服务运行,而不支持32位 – 因此Jet将无法工作。 这是给定的,因为WOW 64没有安装在目标服务器上。 这个线程build议使用32位代理机器,但这也不是一个选项。 更多信息:服务器正在运行Sharepoint 2010。 谢谢, JD

如何在Excel中保存图像而不使用剪贴板,在C#中?

我已经相当广泛地研究了这一点,但还没有find我正在寻找的东西。 我发现的两种方法是 1:使用Microsoft.Office.Interop.Excel,遍历工作簿的形状,然后将图像复制到剪贴板,然后把剪贴板数据,把它放到一个位图,然后保存该位图。 这个方法的问题是剪贴板。 我们希望在multithreading环境中使用它,并且害怕线程之间的剪贴板问题。 我们宁愿不处理剪贴板locking。 2:将该文件保存为.HTML文件,然后从保存文档所在的“_files”文件夹中抓取图像。 这个问题是为每个图像创build两个图像(1个高分辨率,1个低分辨率),并且没有好方法来确定哪些图像是低分辨率的,哪些图像是高分辨率的,因为它们全部被命名图片###和一些文件列出他们高,低,高,低,而一些列出他们高,高,低,低。 使用所有这些文件是缓慢的,占用空间,这是不理想的。 我可以通过纵横比来检查图像,但这显然不是很好,因为多个图像可以具有相同的纵横比。 有没有办法直接parsingExcel.Shape作为位图(或任何图像格式),而不使用剪贴板? 似乎必须有一种方法,因为Shape.CopyPicture方法能够以图像格式将其发送到剪贴板。 否则,有没有办法做一些类似于2号的东西,而不会有重复? 我宁愿避免使用第三方库的解决scheme。 谢谢。

通过Handle使用C#获取Excel应用程序的实例

我有一个简单的应用程序,必须在特定的工作表的Excel范围内写入一些值。 我创build一个Excel应用程序的实例,如果不存在,但如果存在,我想设置活动它,并采取一个实例,如果它在我的代码中使用。 我使用这个代码来创build一个新的应用程序: Microsoft.Office.Interop.Excel app = new Microsoft.Office.Interop.Excel.Application(); app.Visible = true; 为了得到主动excel窗口的句柄,我使用这个api [DllImportAttribute("User32.dll")] private static extern int FindWindow(String ClassName, String WindowName); 我怎样才能得到一个处理excel应用程序的实例? int hWnd = FindWindow(null, "Microsoft Excel – MySheet.xlsx"); Microsoft.Office.Interop.Excel app = ….(hWnd)

防止代码被加载到另一个AppDomain

我们有一个通常工作正常的excel插件,我们没有设置使用AppDomains任何东西。 然而,其他一些插件似乎强制我们的代码第二次加载,我们最终让我们的代码在两个不同的AppDomains上运行(当我们要执行一个动作时,我们将它放在AppDomain 1上的队列中,然后,ExcelsonTime函数在AppDomain 2上运行出队方法,队列为空)。 所以,我的问题是:是否有一个简单的方法来解决这个问题,也许阻止我们的程序被加载两次或其他AppDomains ? 有没有人有任何其他的想法如何解决这个问题? 更新: 我们设法做的是在我们被调用的时候把我们的整个程序加载到其他的插件的AppDomain中,现在我们在相同的地方(曾经是“到其他域的网关”的地方,比如上面提到的动作队列函数): 当出现这种情况时,SynchronizationContext.Current似乎重置为null,例如对于function区上的每个单击处理函数的调用,SynchronizationContext.Current被设置为null。 我甚至尝试过debugging.Net代码,而且碰巧的是,框架会记住一个旧的同步上下文,当把所有的事情都弄回原来的样子时,旧的同步上下文就是空的。 任何人都可以在这个问题上给予任何帮助,我真的开始失去它?

从DataGridView到Excel 2002中隐藏的exception复制/粘贴

早上好, 运行Visual Studio 2008(C#3.5)。 DataGridView手动加载(不是数据绑定)。 复制/粘贴到记事本/写字板工作正常,但是当我尝试复制/粘贴到Excel我得到这个奇怪的例外: Invalid FORMATETC structure (Exception from HRESULT: 0x80040064 (DV_E_FORMATETC)) 这是上星期五的工作。 我完全难倒了。 我很确定这在过去有效。 我试过重新启动,重新添加DataGridView控件。 任何帮助非常感谢。 问候,阿兰。

在C#中,如何使用Excel Interop来加速编写多个单元格值

我有一个硬件,我得到30个数据点。 每个这些点都logging在电子表格中的几个不同的地方,然后另一个程序接pipe了Excel电子表格。 要求所有这些值在其他程序接pipe之前写入电子表格。 如果我单独写入每个单元,写入大约需要50ms,大约需要1.25秒才能完成数据采集。 如果我可以一次把所有的值写入电子表格,我觉得这将大大加快所有这些单元格的写作。 我看到的问题是,范围工作得非常好,因为我的数据不是连续的更新连续的单元格。 从本质上讲,这将是我想写的一个例子: A1 = 1 B23 = a F8 = 2012/12/25 D53 = 4.1235 B2 = 5 我已经尝试创build“A1,B23,F8,D53,B2”的范围,然后使用值数组设置值。 我尝试了3个不同的数组:object [5],object [1,5]和object [5,1]。 这些都将范围内的指定单元格的值设置为我在所有情况下创build的数组的第一个索引。 有没有办法更新这些30个单元格的数据,而不是一次一个遍历单元格? 谢谢,汤姆