我如何精确地从iOS写出一个CSV文件在Swift写?
我正试图导出一个CVS文件。
用下面的代码我设法得到文件
let fileName = "sample.csv"//"sample.txt" @IBAction func createFile(sender: AnyObject) { let path = tmpDir.stringByAppendingPathComponent(fileName) let contentsOfFile = "No,President Name,Wikipedia URL,Took office,Left office,Party,Home State\n1,George Washington,http://en.wikipedia.org/wiki/George_Washington,30/04/1789,4/03/1797,Independent,Virginia\n2,John Adams,http://en.wikipedia.org/wiki/John_Adams,4/03/1797,4/03/1801,Federalist,Massachusetts\n3,Thomas Jefferson,http://en.wikipedia.org/wiki/Thomas_Jefferson,4/03/1801,4/03/1809,Democratic-Republican,Virginia\n4,James Madison,http://en.wikipedia.org/wiki/James_Madison,4/03/1809,4/03/1817,Democratic-Republican,Virginia\n5,James Monroe,http://en.wikipedia.org/wiki/James_Monroe,4/03/1817,4/03/1825,Democratic-Republican,Virginia\n6,John Quincy Adams,http://en.wikipedia.org/wiki/John_Quincy_Adams,4/03/1825,4/03/1829,Democratic-Republican/National Republican,Massachusetts" //"Sample Text repacement for future cvs data"content to save // Write File do { try contentsOfFile.writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding) print("File sample.txt created at tmp directory") } catch { print("Failed to create file") print("\(error)") } } // Share button @IBAction func shareDoc(sender: AnyObject) { print("test share file") docController.UTI = "public.comma-separated-values-text" docController.delegate = self//delegate docController.name = "Export Data" docController.presentOptionsMenuFromBarButtonItem(sender as! UIBarButtonItem, animated: true) //} }
当我点击模拟器中的共享文件button,我看到以下内容:
并快速查看它显示
所以接下来的事情是我的iPhone 5testing,我试图发送电子邮件sample.csv,但我只得到消息正文,而不是csv文件?
- 我怎么能真正电子邮件的.csv文件?
- 哪些出口可能性在那里?
为了通过电子邮件.csv文件,您可以执行以下操作:
-
将此导入添加到类的顶部。 它允许您使用MFMailComposeViewController,这是一种发送电子邮件的方式。
import MessageUI
-
生成你的数据,我做的一个例子是:
// Creating a string. var mailString = NSMutableString() mailString.appendString("Column A, Column B\n") mailString.appendString("Row 1 Column A, Row 1 Column B\n") mailString.appendString("Row 2 Column A, Row 2 Column B\n") // Converting it to NSData. let data = mailString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) // Unwrapping the optional. if let content = data { print("NSData: \(content)") }
-
生成MFMailComposeViewController
// Generating the email controller. func configuredMailComposeViewController() -> MFMailComposeViewController { let emailController = MFMailComposeViewController() emailController.mailComposeDelegate = self emailController.setSubject("CSV File") emailController.setMessageBody("", isHTML: false) // Attaching the .CSV file to the email. emailController.addAttachmentData(data!, mimeType: "text/csv", fileName: "Sample.csv") return emailController } // If the view controller can send the email. // This will show an email-style popup that allows you to enter // Who to send the email to, the subject, the cc's and the message. // As the .CSV is already attached, you can simply add an email // and press send. let emailViewController = configuredMailComposeViewController() if MFMailComposeViewController.canSendMail() { self.presentViewController(emailViewController, animated: true, completion: nil) }
在你的情况下,因为你已经创build了这个文件,你可以直接通过改变CSV附加到邮件的行来直接附加这个文件:
emailController.addAttachmentData(NSData(contentsOfFile: "YourFile")!, mimeType: "text/csv", fileName: "Sample.csv")
回答基于: 将csv附加到电子邮件xcode , 在Swift中创buildCSV文件并写入文件
在Swift 3中创buildCSV文件
class ViewController: UIViewController { var taskArr = [Task]() var task: Task! override func viewDidLoad() { super.viewDidLoad() task = Task() for _ in 0..<5 { task.name = "Raj" task.date = "\(Date())" task.startTime = "Start \(Date())" task.endTime = "End \(Date())" taskArr.append(task!) } creatCSV() } // MARK: CSV file creating func creatCSV() -> Void { let fileName = "Tasks.csv" let path = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName) var csvText = "Date,Task Name,Time Started,Time Ended\n" for task in taskArr { let newLine = "\(task.date),\(task.name),\(task.startTime),\(task.endTime)\n" csvText.append(newLine) } do { try csvText.write(to: path!, atomically: true, encoding: String.Encoding.utf8) } catch { print("Failed to create file") print("\(error)") } print(path ?? "not found") } }
任务模型类
class Task: NSObject { var date: String = "" var name: String = "" var startTime: String = "" var endTime: String = "" }
CSV输出显示如下格式